103-静态库

来源:互联网 发布:直播源码下载 编辑:程序博客网 时间:2024/06/06 13:12
什么是库?
库是程序代码的集合,是共享程序代码的一种方式

根据源代码的公开情况,库可以分为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中改成静态库


0 0
原创粉丝点击