组件 静态库 动态库
为什么要研究库
在我的开发多个项目中,存在使用相同的组件和工具类。
在新项目中,每次都需要把相同的组件和工具类拷贝进去。如果存在依赖还需要去添加依赖。 一步没有操作完善,就可能出现未知的错误,这就需要花时间去解决错误。不但浪费时间还浪费精力,更影响心情。在这种情况下我就想到库,项目中需要只需导入库就可以了,还可以提供给别人使用。既方便又快捷还省心。
这篇文章主要介绍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等
闭源库:创建人或者有权限人可以访问并使用
- 全闭源:真正意义的私有,只能创建者访问并使用。
- 半闭源:小范围的私有,一个公司、一个团队访问并使用。
特殊库:公开访问并使用。源代码是公开的,这个源代码是一个静态库,库内部里面是否可以看到实现文件,需要根据静态库是否可见实现文件(开源库里面包括闭源库)

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

被折叠的 条评论
为什么被折叠?



