iOS 开发之 .framework是什么?

2017-06-30  本文已影响437人  DDDDeveloper

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

什么是“库”?

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

开源库

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

闭源库

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

静态库

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

动态库

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

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

.a文件肯定是静态库,.dylib肯定是动态库,.framework可能是静态库也可能是动态库;
静态库在链接时,会被完整的复制到可执行文件中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存。类似于定义一个基本变量,使用该基本变量是是新复制了一份数据,而不是原来定义的;
动态库不会复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,节约了内存。类似于使用变量的内存地址一样,使用的是同一个变量;
但是项目中如果使用了自己定义的动态库,苹果是不允许上架的,在iOS8.0以后苹果开放了动态加载.dylib的接口,用于挂载.dylib动态库。

制作静态库

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

选择 Static Library 新建的 project

2.写个方法进去

![屏幕快照 2017-06-30 15.08.49.jpg](https://img.haomeiwen.com/i2426787/03bb3734da378ea3.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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


点击加号添加头文件

4.编译 command + B
5.点击对应的.a文件,show in Finder。即可看到生成以个.a 文件,可以将该文件拖入其他工程中进行使用验证。

上一篇下一篇

猜你喜欢

热点阅读