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

iOS开发之静态库-基本概念

2016-03-04 16:41 239 查看
在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程,在iOS开发中却遇到了麻烦,原因是:苹果公司禁止在iOS开发中使用动态库(而苹果自己却可以使用动态库),同时,苹果也从Xcode中移除了创建静态框架的功能。值得庆幸的是我们可以通过对Xcode进行小小的改动来创建静态框架,而静态库和静态框架是被App
Store所允许的,其实静态框架本质上说也是静态库的一种。


在正式的上代码之前,先介绍一些从网上搜集的静态库相关的基本概念,以加深对后面知识的理解

1. 库

库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库。

2. 区别

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

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

3.iOS中静态库的形式

在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。

之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却

又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库(无

可奈何啊)。

4..a与.framework的区别

二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制

文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。

5.静态库使用的必要性

1> 代码的共享与重用

2> 程序模块化

3> 分享给别人代码库时代码隐藏

4> 开发第三方SDK

6.对图片资源和UI界面xib或nib文件的处理

.a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该

bundle文件的名字和.a或.framework的名字相同。关于bundle文件的制作方法,后面有专门介绍。

有个疑问:

.a文件中无法存放图片或xib文件,很容易理解,但是.framework从本质上说也是一个bundle文件,为什么

不把图片或者xib文件直接放在.framework中而单独再创建个bundle文件呢?

那是因为iOS系统不会去扫描.framework下的图片等资源文件,也不会在项目中显示,也就是说即使放在

.framework目录下,系统根本就不会去扫描,因此也无法发现使用。

7.category的处理

category是项目开发中经常用到的,把category打包成静态库是没有问题的,但是在使用这个静态库时,

调用category中的方法时会发生找不到该方法的运行时错误(selector not recognized),解决的办法是在使

用静态库的工程中配置other linker flags的值为 -ObjC -all_load
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: