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.新建静态库 并且 命名
Snip20161012_3.png
2.将打包为静态库的代码放入的.m文件中
Snip20161012_5.png
在.h文件中暴露接口给外界,并将.h文件添加在copy file中
Snip20161012_8.png

在Command + b编译即可


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 文件暴露出来即可
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简述 为了满足既供用户使用又维持代码保密性的需求,这时我们就有必要创建 库文件。苹果在这个方面提出了静态库和动态库...
    寒桥阅读 1,029评论 0 3
  • 如果你想偷懒,务必要学会静态库的制作,一定要有自己的一套静态库。优点:易维护、整洁性、封装。 一、静态库和动态库的...
    黄成瑞阅读 373评论 0 0
  • 一、静态库简介 1.1、库:是程序代码的集合,是共享程序代码的一种方式。 1.2、根据源代码的公开情况,库可以分为...
    IIronMan阅读 5,731评论 18 29
  • (1)静态库和动态库的存在形式 静态库:.a和.framework 动态库: .dylib 和 .framewor...
    jason_Yun阅读 499评论 0 0
  • 前言 1.静态库和动态库有什么异同? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。利用静态...
    Ly梦k阅读 8,690评论 3 18