Objective-C库文件使用小记
来源:互联网 发布:淘宝品控违规描述不符 编辑:程序博客网 时间:2024/06/02 13:13
静态库 VS 动态库
静态库:静态库在Objective-C里面以.a或者.framework作为后缀,目前开发者自己创建的库文件(Framework)其实都是以静态库的形式链接到执行文件的。链接时完整的拷贝到了可执行文件中,被多次使用就会有多份拷贝(eg:iOS8+的Extention中使用)。静态库文件一般都会比较大,因为所有要使用的数据都会被编译进去,而且如果库文件的某个函数改变了,那么就又需要重新编译新的库文件了,优点就是编译后的执行程序不需要外部的函数库支持,因为所有的函数都已经被编译进去了。
动态库:动态库在Objective-C里面以dylib或者.framework最为后缀,系统为我们提供的framework就是动态库,目前开发者是不允许使用动态库的,因为我们自己创建的库文件虽然buildSetting中的Mach-O Type设置为Dynamic Library,但是使用时直接链接到程序里面的,而不是放在服务器上进行更新,开发者如果使用动态库放在服务器上,然后动态的加载dlopen是不会通过审核的,不然Apple的审核就没有意义了。动态库在链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序间共用,节省内存,而且升级方便。
我们创建framework库文件时,系统默认是动态库的格式,如果想做成静态库,需要在buildSetting中将Mach-O Type选项设置为Static Library就行了!
framework VS .a
a:.a是纯二进制文件,不能直接拿来使用,需要配合头文件、资源文件一起使用。代码资源、图片、json资源、xib文件等是无法打包进去的,所以使用.a静态库的时候需要三个组成部分:.a文件+开放的头文件+资源文件。
framework:相当于一个文件夹,可以直接拿来使用,所需要的资源、头文件、源文件都在里面。
Static Library/Framework VS Embedded Framework
Embedded Framework是iOS8引入的为了方便Extention和宿主APP公用一份代码库而引入的,Embedded Framework必须是Dynamic framework(在buildSeting中设置为Dynamic)。如果你想限制在Extention中不可用的API放入你的Embedded Framework,你可以勾选Allow app extension API only选框。
-framework的妙用
有些静态库文件我们只是在DEBUG模式下,调试使用。而不想打入release包中,因为这样会增加安装包的大小,这时可以在buildSetting中的Other Linker Flags下对应的模式中添加需要的库文件,以-framework标记,这样程序编译的时候就会根据里面的标记来编译进执行文件中。
在使用时可以利用runtime的反射来判断库文件有没有被加载,或者利用buildSetting中的预编译宏Preprocessor Macros来标记。
if
(NSClassFromString(@
"MyFramework"
) != Nil) {
//MyFramework被加载了
}
//or
#if DEBUG
/*该模式下可使用DEBUG模式下‘Other Linker Flags’
通过‘-framework’引入的静态库*/
#endif
参考文章
https://hacking-ios.cocoagarage.com/working-with-a-static-library-framework-vs-embedded-framework-9ca7cd77b4f9#.ign0m484w
http://www.knowstack.com/framework-vs-library-cocoa-ios/
http://stackoverflow.com/questions/27015154/link-binary-with-libraries-vs-embed-frameworks
- Objective-C库文件使用小记
- objective-c 使用文件
- Objective-c小记
- objective-c 使用文件(一)
- objective-c 使用文件(二)
- objective-c 使用文件(一)
- objective-c 使用文件(二)
- objective-c 使用文件(一)
- objective-c 使用文件(一)
- objective-c 使用文件(二)
- c语言的.h文件使用小记
- 使用Objective-C解压缩ZIP文件教程
- 使用Objective-C解压缩ZIP文件教程
- 使用Objective-C解压缩ZIP文件教程
- objective-c添加字体文件,使用字体文件字体
- OBJECTIVE-C写入文件
- Objective-C 文件操作
- objective-c 文件
- android中使用WebView中的一些问题
- 学习方法的感悟
- 算法——递推算法
- fiddler抓包工具【一】
- 根据时间段去做查询条件
- Objective-C库文件使用小记
- 用SpannableString打造绚丽多彩的文本显示效果
- 剑指offer中位运算技巧
- 字符串的替换和拆分
- 怎么给MindManager数据库导入数据连接
- Revit API 开发 (3): 一个使用过滤器(filter)的例子
- 扎克伯格的26张PPT帮助你提高工作效率
- 笔记:c++的const类成员函数(1)
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍