iOS 静态库

源代码分为两种

1.开放源码库:开源代码,能看到具体实现

2.不开放源码库:不公开源代码,是经过编译后的二进制文件,看不到具体实现


不开放源码库主要有两种存在形式

1.静态库:.a和.framework(自己制作)

2.动态库:.dylib .tbd和.framework(系统自带)


静态库和动态库在使用上的区别

1.静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝

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



常见问题:

1.iOS里静态库形式?

.a和.framework


2.iOS里动态库形式?

.dylib .tbd和.framework


3.framework为什么既是静态库又是动态库?

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


4.a与.framework有什么区别?

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

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用(.h等资源已经在其内部,图片资源一般再打一个.bundle文件)。

.a + .h + sourceFile = .framework。

建议用.framework.


5.为什么要使用静态库?

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

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

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

开发第三方sdk的需要。


静态库版本分类 

针对运行环境分为两种

1.真机版本  iPhoneos

2.模拟器版本  iPhonesimulator  


针对运行模式

调试版本  debug

发布版本  release


制作静态库的注意点

无论是 .a 静态库还是 .framework 静态库,最终需要的都是:二进制文件 + .h + 其它资源文件


.a 本身是一个二进制文件,需要配上 .h 和 其它资源文件 才能使用

.framework 本身已经包含了 .h 和 其它资源文件,可以直接使用


图片资源的处理

如果静态库中用到了图片资源,一般都放到一个bundle文件中,bundle名字一般跟 .a 或 .framework 名字一致

bundle的创建:新建一个文件夹,修改扩展名为 .bundle 即可,右击bundle文件,显示包内容,就可以往bundle文件中放东西


多文件处理

如果静态库需要暴露出来的 .h 比较多,可以考虑创建一个主头文件(一般 主头文件 和 静态库 同名)

在主头文件中包含所有其他需要暴露出来的 .h 文件

使用静态库时,只需要#import 主头文件


静态库中包含了Category

如果静态库中包含了Category,有时候在使用静态库的工程中会报“方法找不到”的错误(unrecognized selector sent to instance

解决方案:在使用静态库的工程中配置Other Linker Flags-ObjC



查看静态版本类型

lipo -info lib.a

合并静态版本类型

lipo -create Debug-iphoneos/lib.a Debug-iphonesimulator/lib.a -output lib.a


sdk 开发经历的阶段

(1)xcode 6.0之前,需要自己配置framework的文件创建(xcode)


(2)由于framework在AppStore存在被拒审的风险 我们一般采用 制作.a 


(3)现在阶段已经不存在拒审的风险,都是采用framework对外提供功能实现 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值