(1)静态库和动态库的存在形式
静态库: .a 和 .framework
动态库: .dylib 和 .framework (最新的已经是.tbd和.framework)
(2)静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝
优点:
1.使自己的源码不会简单的暴漏给别人,保密性很好,但是在一个公司开发项目的话,这样不方便交流沟通。
2.当需要使用静态库的时候,只需要把相应的.h文件和.a文件拷贝到工程中就好,不需要再将所有的源码一一拷贝。这样既加快了开发流程,也不会使整个项目的压缩包很大。
3.显得也比源码拷贝高端、大气一些。
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
优点:
1.和静态函数库相比,动态函数库在编译的时候不会被编译进目标代码中,该函数库里的相应函数只有当程序执行到某些函数时才会被调用,因此动态函数库所产生的可执行文件并不会占用很大的内存。
2.由于函数库没有被整合进自己的程序,而是在程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。
3.动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
注意:
苹果公司规定:如果项目中使用自己写的动态库,就不能上传到AppStore
(3)制作过程
打开安装的Xcode,新建项目-> 选择 “Cocoa Touch Static Library”
添加所需要的库中包含的源代码,add to target 中的方框记得勾选
在此,本人选择的是AFNetworking库
选择需要暴露出来的 .h 文件, .m 文件会自动编译到 .a 文件中
从左侧库文件中选择所有的.h文件,拖动到右侧public中
先选择真机设备,然后然后 Command+B 编译,libAFNetworking.a的文件从红色变为黑色
选择模拟器,依然 Command+B ,模拟器和真机环境下用的 .a 文件是分开的,右击 “Show In Finder” ,查看制作好的 .a 文件
Debug-iphoneos 文件夹里面的东西是用在真机上的
Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的
如果 Scheme 是 Release 模式,生成的文件夹就以 Release 开头
(4)合并.a文件,使得能同时用在真机和模拟器上
在终端输入命令:
lipo -create Debug-iphoneos/libAFNetworking.a的根路径 Debug-iphonesimulator/libAFNetworking.a的根路径 -output
(5)使用 .a
如何使用 .a
直接将 .a 、 .h 、资源文件拖拽到其他项目中即可
网友评论