补充
我们对符号应该有一定的认识,这里再补充点关于符号的内容。我们有时候需要知道符号的种类
,我们通过命令nm -pa 文件名
来查看符号
我们看到
地址后面
有t、d、T等关键字
,这些关键字就是符号种类
,下面整理了一下符号种类划分
命令查找
上面用到命令-pa
,这里我们来说下-pa的含义
,-pa
其实包含两部分
,-p、-a
,我们可以通过查看命令符号查看
- 1.在终端输入
man nm
,来到name list
- 2.向下滚动,查找
-p,-a
我们可以知道
-a
:显示所有符号表项,包括插入的使用调试器
。-p
:不排序;按符号表顺序显示
。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130 595 548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)
静态库
库相关知识
我们常用的库文件格式有.a、.dylib、.framework、.xcframework
.a:常见的静态库
.dylib:传统上说的动态库
.framework:既有动态库,又有静态库
.xcframework
:是苹果2018年推出
来的,可以将不同架构
的库整合到一起
。好处就是模拟器,真机可以通用
,上架AppStore,不需要将xcframework中的真机架构分离
,.framework还需要用脚本分离
我们这里主要介绍.a
和.framework
格式的静态库
库含义
库(Library)说白了就是一段编译好
的二进制代码
,加上头文件
就可以供别人使用
。
库的使用时机
- 1.某些
代码
需要给别人使用
,但是我们不希望
别人看到源码
,就需要以库
的形式进行封装
,只`暴露出头文件。 - 2.对于某些
不会进行大的改动的代码
,我们想减少编译的时间
,就可以把它打包成库
,因为库是已经编译好的二进制
了,编译
的时候只需要Link一下
,不会浪费编译时间
。
什么是Link
库在使用的时候需要链接(Link),链接的方式有两种:
- 1.
静态
- 2.
动态
什么是静态库
静态库即静态链接库:可以简单的看成一组目标文件的集合
。即很多目标文件
经过压缩打包
后形成的文件。Windows下的 .lib
,Linux 和 Mac 下的 .a
。Mac独有的.framework
。
- 缺点:
浪费内存
和磁盘空间
,模块更新困难
什么是动态库
与静态库相反,动态库
在编译时
并不会
被拷⻉到目标程序
中,目标程序中只会存储指向动态库的引用
。等到程序运行时
,动态库
才会被真正加载进来
。格有:.framework、.dylib、.tdb
。
- 缺点:
会导致一些性能损失
。但是可以优化
,比如延迟绑定(Lazy Binding)技术
如何生成静态库
我们实操一个.m文件,.m如下代码:
上面代码我们导入了
AFN
,main函数中使用了AFN的代码
,并打印了manager
,这就是就是一个很常用的简单的类中引用其它第三方
的代码
和这部分代码放在一个文件夹里还有AFN的代码,里面包含了AFN的静态库