iOS中的静态库/动态库

2017-07-19  本文已影响85人  逗留

静态库:(.a, .framework)

在链接时,会被完整的复制到可执行文件中,被多次使用,就有多次拷贝(比如手机上多个应用都用到同一个静态库,这个静态库会复制到各个应用中),开发中基本都用这个,在MRC下打包的静态库,可以直接运行在ARC,这个特性可以帮助我们在使用一些MRC库的时候,不需要再去挨个头文件去加编译选项了,而且可以提高工程的编译速度

动态库:(.dylib,  .framework)

只有一份,不会复制,程序运行时动态加载到内存,系统只加载一次,多个程序公用,节省内存

但是项目中如果使用到自己的动态库,不允许上架,再但是iOS8开放动态加载dylib的接口,也就是开放了动态库挂载,不过开发者用的并不多

(新建一个工程,或者target,其实就是一个新的target)

制作.a静态库  

生成静态库时需要注意静态库支持的架构

模拟器:

4s---5: i386

5s---:   x86_64

真机:

3gs---4s:  armv7

5/5c :  armv7s(armv7兼容armv7s)

5s---: arm64

使用终端查看一个静态库文件支持的架构

lipo -info [.a文件]

兼容所有模拟器,将build setting中build active architecture only(仅编译活跃结构)设置为NO

兼容所有真机同上

另外还有debug和release两种模式

debug:包含完整的符号信息,方便调试,不会对代码进行优化

release:不会包含完整的符号信息,会对代码进行优化,包会小一点,速度会快一点

.a 文件的合并

lipo -create [.a文件]  [.a文件]  -output  hebing.a

合并哪些看需求

.a 文件的分解

lipo -remove i386  [.a文件]  -output  noi386.a     //移除一个

lipo -thin arm64  [.a文件]  -output  arm64.a     //只要一个

制作.framework静态库

机型兼容的设置方法同.a

查看支持机型,同样使用lipo -info [framework文件],但是这个文件是

使用file [framework文件] ,可以查看这个framework是静态库还是动态库

若要制作静态库,还需在build setting中设置Mach-O Type为Static Library,默认是动态库

在制作静态库的时候,最好把资源(图片等)放到一个.bundle中,使用静态库的时候,可以手动把这个bundle拖到工程中,这样做是避免资源被拷贝到mainBundle中,与已有资源发生冲突,如果不用bundle的话,也可以使用引用物理文件夹的方式

合并与分解的操作同.a,但是操作的文件是上图所示的文件

注:如果要使用动态库,需要在General/Embedded Binaries中引入这个库

上一篇下一篇

猜你喜欢

热点阅读