为什么把代码打包成库?
不想让别人看到.m文件
直接Link编译好的二进制代码,节省编译时间
方便代码的管理
Link代码的不同形式本质区分静态库和动态库
静态库和动态库的区别?
系统库 = 动态库 = 编译APP时才载入 = 动态引用不拷贝到目标程序 = 节省应用大小 = 也称共享库。
.dylib和.tbd结尾 ∈ 系统动态库
系统动态库即导即用 = 不需要Link依赖
自定义动态库导入 = 必须在Embedded Binaries中导入 = 编译底层逻辑与静态库相同 = 会拷贝到目标程序中 = 其实就是个假的动态库,哈哈 = 而且自定义动态库苹果不让上架,自己悄悄玩
编译APP时拷贝的二进制代码到目标程序 = 静态库嵌入
手动添加依赖库 = 静态库Link。例如CoreVideo.framework
静态库低耦合性 = 个个独立自动避免重复Link
Framework认识?
Framework = Headers + binary + bundle +(Info.plist + Modules)
Headers = .h文件集合
binary = .m文件编译成的二进制集合(不包含依赖库) = 正好解释为什么三方SDK非要我们自己去添加依赖,而不是一起打包到SDK里
bundle = 资源文件集合 = 资源提取用[NSBundle mainBundle]
Framework创造?
右击Product + show in finder + 拷贝到目标文件夹 + 第三方静态库也拷贝到文件夹
静态库版本(4种)
1.真机-Debug版本
2.真机-Release版本
3.模拟器-Debug版本
4.模拟器-Release版本
静态库的合并
1、 检测.a的类型
$ lipo -info libCZTools.a
2、 合并.a。好处:既可以在真机上调试,也可以在模拟器上调试;缺点:如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的
lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a