IOS 静态库和动态库详解

本文探讨了为何要研究库,主要聚焦于iOS的静态库和动态库。静态库在编译时被链接,运行时不需库文件,以.a和.framework为后缀,但会增加应用体积。动态库在运行时加载,节省内存,以.tbd和.framework为后缀。文章介绍了创建静态库的两种方式:手动创建和使用CocoaPods,并详细阐述了静态库的源码类型,包括开源、闭源和特殊库的区别。

组件 静态库 动态库

为什么要研究库

在我的开发多个项目中,存在使用相同的组件工具类
在新项目中,每次都需要把相同的组件工具类拷贝进去。如果存在依赖还需要去添加依赖。 一步没有操作完善,就可能出现未知的错误,这就需要花时间去解决错误。不但浪费时间还浪费精力,更影响心情。在这种情况下我就想到库,项目中需要只需导入库就可以了,还可以提供给别人使用。既方便又快捷还省心。

这篇文章主要介绍IOS静态库、动态库,在苹果审核中不允许使用自己的动态库,静态库将作为主要的讲解对象。

什么是静态库?什么是动态库?

静态库: 在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存;以.a 和 .framework为文件后缀名。

动态库: 在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,节约了内存。以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。如UIKit

一、静态库类型区别

静态库包括.framework 、.a两种后缀名类型库。

  • 静态库名称.a 是一个纯二进制文件,要有 .h 文件以及资源文件配合。
  • 静态库名称.framework中除了有二进制文件之外还有资源文件,可以直接使用。

总结: 创建静态库建议用.framework的形式。

二、创建静态库形式

手动创建静态库

  • 创建项目选择Framework&Library中Framework或者Static Library
  • 添加自己需要源代码
  • 生产真机、模拟器的.framework或者.a的静态库
  • 合并真机和模拟器的静态库 lipo -reacte 真机静态库路径 模拟器静态库路径 -output 合并后的静态包路径

CocoaPods创建静态库

  • 使用CocoaPods创建项目。pod lib create 项目名称
  • 添加自己源代码,配置.podspec文件并验证。pod lib lint 项目名称.podspec
  • 使用pod package打包。
    • pod package 项目名称.podspec --library --force 打包成.a文件。–force是指强制覆盖
    • pod package 项目名称.podspec --force 打包成.framework文件
三、静态库源码类型

开源库:公开访问并使用。源代码是公开的,可以看到每个实现文件(.m文件)的实现,例如GitHub上的常用的开源库:AFNetworking、SDWebImage等

闭源库:创建人或者有权限人可以访问并使用

  • 全闭源:真正意义的私有,只能创建者访问并使用。
  • 半闭源:小范围的私有,一个公司、一个团队访问并使用。

特殊库:公开访问并使用。源代码是公开的,这个源代码是一个静态库,库内部里面是否可以看到实现文件,需要根据静态库是否可见实现文件(开源库里面包括闭源库)

四、下一篇文章 手动创建静态库【.framework、.a】详解-不包含资源文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值