静态库和动态库

静态库:.a 和 .framework
动态库:.tbd(.dylib) 和 .framework
静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内存。
但是苹果不让使用自己的动态库,否则审核就无法通过。

.a文件是一个纯二进制文件,不能直接拿来使用,需要配合头文件、资源文件一起使用。
将静态库打包的时候,只能打包代码资源,但是图片文件、本地json文件和xib等资源文件无法打包进去,使用.a静态库的时候需要三个组成部分:.a文件+需要暴露的头文件+资源文件;
.framework文件内部除了有二进制文件(如下图黑色文件)之外还有其他的资源文件(相当于:.framwork文件=黑色二进制文件<.a文件+.h文件>+资源文件<图片、以及本地的html5,json,plist等),可以直接拿来在工程中使用。

当你创建一个framework文件时,系统“默认”是一个动态库的格式,如果想做成静态库,需要在buildSetting中将Mach-O Type选项设置为Static Library就行了!

静态库文件的版本(4种)
真机-Debug版本
真机-Release版本
模拟器-Debug版本
模拟器-Release版本
Debug(调试)版本
1.含完整的符号信息,以方便调试
2.不会对代码进行优化
Release(发布)版本
1.不会包含完整的符号信息
2.的执行代码是进行过优化的
3.的大小会比Debug版本的略小
4.在执行速度方面,Release版本会更快些(但不意味着会有显著的提升)

设备的CPU架构
模拟器:
4s~5 : i386
5s~7p : x86_64

3gs~4s : armv7
5~5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上)
5s~7p : arm64

https://www.jianshu.com/p/c8366e4f9378
http://www.cocoachina.com/ios/20161109/18031.html

查看静态库支持的框架
lipo -info framework下的二进制文件名字

合并模拟器和真机的静态库:
lipo -create 第一个framework下二进制文件的绝对路径 第二个framework下二进制文件的绝对路径 -output 最终的二进制文件路径

你可能感兴趣的:(静态库和动态库)