iOS开发静态库

  • 闭源库:不公开源代码,是经过编译后的二进制文件,看不到具体实现
    主要分为:静态库、动态库
    静态库:.a和 .framework
    动态库:.dylib和 .framework

  • .a 和 .framework(静态)有什么区别
    .a是一个纯二进制文件,.framework中除了有二进制文件外还有资源文件
    .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用
    .a +.h + sourceFile = .framework

  • 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝

  • 动态库:链接时不复制,程序运行时由系统动态加载到内存供程序调用,系统只加载一次,多个程序共用,节省内存(项目中如果含有个人创建的动态库,则会被拒)

  • 静态库文件的版本

  • 真机【Debug】版本 和 【Release】版本

  • 模拟器【Debug】版本 和 【Release】版本

  • Debug版本
    含完整的符号信息,以方便调试,不会对代码进行优化

  • Release版本
    不会包含完整的符号信息,它的执行代码是进行过优化的,它的大小比Debug版本小,在执行速度方面,Release版本更快(一般采用 Release版本)

  • 制作静态库 - .a & Debug版

1.新建静态库 并且 命名
iOS开发静态库_第1张图片
Snip20161012_3.png
2.将打包为静态库的代码放入的.m文件中
iOS开发静态库_第2张图片
Snip20161012_5.png
在.h文件中暴露接口给外界,并将.h文件添加在copy file中
iOS开发静态库_第3张图片
Snip20161012_8.png

在Command + b编译即可


iOS开发静态库_第4张图片
Snip20161012_9.png
  • 注意:

  • 静态库有 模拟器 和 真机 版本,分别选择真机和模拟器编译后即会有这两种静态库

  • Build Active Architecture Only 是控制编译CPU架构的,我们需要在Debug中将其打开,YES表示只编译选中模拟器对应的版本,NO则是表示编译所有版本。

  • 终端查看静态库支持的CPU架构: lipo -info xxx.a

  • 当静态库需要同时支持真机和模拟器,可以对静态库进行合并, 终端中使用以下命令:
    lipo -create Debug-iphoneos/静态库名称.a Debug-iphonesimulator/静态库名称.a -output 合并后的名称.a

补充:
  • 把资源打成静态库时,若里面包含category文件,出现错误(selector not recognized)运行时找不到该方法错误。需要在 build setting 的 other linker flag 标示符里面添加 -ObjC
  • 静态的暴露的.h 文件多时,可直接在静态库的内部创建一个.h文件,把所有要暴露的.h文件放在这个.h中,最后把这个.h 文件暴露出来即可

你可能感兴趣的:(iOS开发静态库)