美文网首页
iOS中的静态库/动态库

iOS中的静态库/动态库

作者: 逗留 | 来源:发表于2017-07-19 18:13 被阅读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中引入这个库

    相关文章

      网友评论

          本文标题:iOS中的静态库/动态库

          本文链接:https://www.haomeiwen.com/subject/hlzlkxtx.html