.framework和库的概念(转载的)

转载自iOS 开发之 .framework是什么?

在 iOS 开发中,我们经常看到.framewrok 文件,那么这个文件到底是怎么来的,有什么作用?

什么是“库”?

首先引入“库”的概念。这可不是“库克”的“库”,“库”就是程序代码的集合,将n个文件组织起来,是共享程序代码的一种方式。库分为开源库和毕源库。

开源库

源代码是公开的,可以看到每个实现文件(.m文件)的实现,例如GitHub上的常用的开源库:AFNetworking、SDWebImage等;

闭源库

不公开源代码,是经过编译后的二进制文件,看不到具体的实现。闭源库又分为:静态库 和 动态库

静态库

你看到的.a 文件就是静态库。
应用场景:保护自己的核心代码,如讯飞语言摸索了好多年探索出的结果当然要保护起来了,都公开了公司还怎么生存。
将MRC的项目打包成静态库,可以在ARC下直接使用,不用转换。如别人使用MRC写的开源库,放到自己ARC项目中,需要对每个文件加一个编译参数 -fno-objc-arc,这样相对来说麻烦,将整个工程打包成静态库直接放到项目中即可,也不用对每个文件添加编译选项。

动态库

你看到的.dylib和.tbd 文件就是动态库。

.framework

  • 综上,.framework 可能是静态库,也可能是动态库。

  • .a文件肯定是静态库,.dylib肯定是动态库,.framework可能是静态库也可能是动态库;

  • 静态库在链接时,会被完整的复制到可执行文件中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存。类似于定义一个基本变量,使用该基本变量是是新复制了一份数据,而不是原来定义的;

  • 动态库不会复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,节约了内存。类似于使用变量的内存地址一样,使用的是同一个变量;

  • 但是项目中如果使用了自己定义的动态库,苹果是不允许上架的,在iOS8.0以后苹果开放了动态加载.dylib的接口,用于挂载.dylib动态库。

制作静态库

  1. 新建一个 project。名字就取我们常用的 FMDB 吧,如图

选择 Static Library
选择 Static Library

新建的 project

  1. 写个方法进去

屏幕快照 2017-06-30 15.08.49.jpg

  1. 指定静态库需要公开的头文件 (如果已经有如图所示的头文件,此步骤可忽略)

点击加号添加头文件

  1. 编译 command + B
  2. 点击对应的.a文件,show in Finder。即可看到生成以个.a 文件,可以将该文件拖入其他工程中进行使用验证。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值