iOS 静态库&动态库

68 阅读2分钟

1 .静态库形式:.a和.framework。

2.动态库形式:.dylib和.framework。

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

4.静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝造成内存资源浪费。

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

a与.framework有什么区别?

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

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

3、也就是说如下对等

      .a + .h + sourceFile = .framework。

CPU架构:

模拟器:iphone4s5 : i386 iphone5s6plus : x86_64真机:iphone3gs4s : armv7  iphone55c : armv7s(静态库只要支持了armv7,就可以跑在armv7s的架构上)iphone5s~6plus : arm64

这里再补充一下查看静态库.a对处理器架构的支持,先cd到.a文件的路径下,命令行输入:lipo -info xxxxx.a

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

FrameWork合并 :lipo -create /Users/liwg/Library/Developer/Xcode/DerivedData/Framework-etlylzwvtfjyiocjhxjjfgnpecij/Build/Products/Debug-iphoneos/Framework.framework/Framework /Users/liwg/Library/Developer/Xcode/DerivedData/Framework-etlylzwvtfjyiocjhxjjfgnpecij/Build/Products/Debug-iphonesimulator/Framework.framework/Framework -output /Users/liwg/Desktop/result.framework  

参考文献:www.jianshu.com/p/cfb82b898…

.a静态库  编译拷贝到可执行文件中,打包时会打包进去,多个程序多份拷贝

.dylib动态库 运行时加载到内存,多个程序只加载一次。iOS 静态库&动态库