什么是库?
库是程序代码的集合,是共享程序代码的一种方式
根据源代码的公开情况,库可以分为2种类型
开源库
公开源代码,能看到具体实现
比如SDWebImage、AFNetworking
闭源库
不公开源代码,是经过编译后的二进制文件,看不到具体实现
主要分为:静态库、动态库
静态库和动态库的存在形式
静态库:.a 和 .framework
动态库:.dylib 和 .framework
静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
静态库
1.创建静态库时候注意,在创建的静态库中显示头文件

2.使用静态库时候注意
1>经典错误: Undefined symbols for architecture i386: 未定义的符号在i386架构上
表示当前的静态库在i386架构上面是不可以使用
2>注意:不同模拟器和真机的架构版本
模拟器:
iPhone4s-->iPhone5 : i386
iPhone5s-->iPhone6plus : x86_64
真机:
iPhone3gs-->iPhone4s : armv7
iPhone5-->iPhone5c : armv7s
iPhone5s-->iPhone6plus : arm64
注意: xcode6以后对armv7不做支持
3>终端命令:查看静态库架构版本和合并静态库架构版本
查看静态库支持哪些架构:lipo -info 静态库.a
将静态库路径拖入到终端中切换目录输入- lipo -info libRHPLib.a
将静态库进行合并:使不同模拟器兼容静态库
lipo -create 静态库1.a 静态库2.a -output 合并后新静态库的名称.a
lipo -create libRHPLib.a Debug-iphonesimulator/libRHPLib.a -output rhptest.a
注意:在不同的虚拟机上创建静态库时,.a文件会默认放在同一目录下,所以在编译第二个.a文件的时候,先把第一个.a文件拖到上一级目录
创建不同模拟器兼容的静态库另一种方式

4>静态库文件的版本(4种)
1. 真机-Debug版本
2. 真机-Release版本
3. 模拟器-Debug版本
4. 模拟器-Release版本
5>调试版本(Debug版本) VS 发布版本(Release版本)区别
调试版本会包含完整的符号信息,以方便调试
调试版本不会对代码进行优化
发布版本不会包含完整的符号信息
发布版本的执行代码是进行过优化的
发布版本的大小会比调试版本的略小
在执行速度方面,调试版本会更快些,但不意味着会有显著的提升
创建Relese版本的静态库
2.创建framework静态库时候注意
默认创建的framework是动态库,在build setting中改成静态库

库是程序代码的集合,是共享程序代码的一种方式
根据源代码的公开情况,库可以分为2种类型
开源库
公开源代码,能看到具体实现
比如SDWebImage、AFNetworking
闭源库
不公开源代码,是经过编译后的二进制文件,看不到具体实现
主要分为:静态库、动态库
静态库和动态库的存在形式
静态库:.a 和 .framework
动态库:.dylib 和 .framework
静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
静态库
1.创建静态库时候注意,在创建的静态库中显示头文件
2.使用静态库时候注意
1>经典错误: Undefined symbols for architecture i386: 未定义的符号在i386架构上
表示当前的静态库在i386架构上面是不可以使用
2>注意:不同模拟器和真机的架构版本
模拟器:
iPhone4s-->iPhone5 : i386
iPhone5s-->iPhone6plus : x86_64
真机:
iPhone3gs-->iPhone4s : armv7
iPhone5-->iPhone5c : armv7s
iPhone5s-->iPhone6plus : arm64
注意: xcode6以后对armv7不做支持
3>终端命令:查看静态库架构版本和合并静态库架构版本
查看静态库支持哪些架构:lipo -info 静态库.a
将静态库路径拖入到终端中切换目录输入- lipo -info libRHPLib.a
将静态库进行合并:使不同模拟器兼容静态库
lipo -create 静态库1.a 静态库2.a -output 合并后新静态库的名称.a
lipo -create libRHPLib.a Debug-iphonesimulator/libRHPLib.a -output rhptest.a
注意:在不同的虚拟机上创建静态库时,.a文件会默认放在同一目录下,所以在编译第二个.a文件的时候,先把第一个.a文件拖到上一级目录
创建不同模拟器兼容的静态库另一种方式
4>静态库文件的版本(4种)
1. 真机-Debug版本
2. 真机-Release版本
3. 模拟器-Debug版本
4. 模拟器-Release版本
5>调试版本(Debug版本) VS 发布版本(Release版本)区别
调试版本会包含完整的符号信息,以方便调试
调试版本不会对代码进行优化
发布版本不会包含完整的符号信息
发布版本的执行代码是进行过优化的
发布版本的大小会比调试版本的略小
在执行速度方面,调试版本会更快些,但不意味着会有显著的提升
创建Relese版本的静态库
2.创建framework静态库时候注意
默认创建的framework是动态库,在build setting中改成静态库