您的位置:首页 > 移动开发 > IOS开发

iOS静态库和Framework区别

2016-10-28 14:27 204 查看

什么是库

库是共享程序代码的方式,一般分为静态库和动态库。

静态库与动态库的区别

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

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

iOS里静态库形式

.a
.framework


iOS里动态库形式

.dylib
.framework


framework为什么既是静态库又是动态库

系统的
.framework
是动态库,我们自己建立的
.framework
是静态库。

a与.framework有什么区别

.a
是一个纯二进制文件,
.framework
中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,
.framework
文件可以直接使用。

.a + .h + sourceFile = .framework


建议用
.framework
.

为什么要使用静态库

方便共享代码,便于合理使用。

实现iOS程序的模块化。可以把固定的业务模块化成静态库。

和别人分享你的代码库,但不想让别人看到你代码的实现。

开发第三方sdk的需要。

制作静态库时的几点注意

注意理解

无论是
.a
静态库还
.framework
静态库,我们需要的都是二进制文件
+.h+其它资源文件
的形式,不同的是,
.a
本身就是二进制文件,需要我们自己配上
.h
和其它文件才能使用,而
.framework
本身已经包含了.h和其它文件,可以直接使用。

图片资源的处理

两种静态库,一般都是把图片文件单独的放在一个
.bundle
文件中,一般
.bundle
的名字和
.a
.framework
的名字相同。
.bundle
文件很好弄,新建一个文件夹,把它改名为
.bundle
就可以了,右键,显示包内容可以向其中添加图片资源。

category处理

category
是我们实际开发项目中经常用到的,把
category
打成静态库是没有问题的,但是在用这个静态库的工程中,调用
category
中的方法时会有找不到该方法的运行时错误
(selector not recognized
),解决办法是:在使用静态库的工程中配置
other linker flags
的值为
-ObjC


复杂的静态库

如果一个静态库很复杂,需要暴露的
.h
比较多的话,就可以在静态库的内部创建一个
.h
文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的
.h
文件都集中放在这个
.h
文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

参考文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息