iOS 库(一)动态库与静态库
2023-04-07 本文已影响0人
fanren
前言
在iOS开发中,我们会用到系统的库(UIKit
、Foundation
等),也会用到一些第三方的库(AFNetworking
,SDWebImage
等),偶尔也会自定义一些自己的库;
库,是我们实现组件化路上的一个基石;
一、分类
库,一般被分为静态库、动态库;
但是在iOS中,我更习惯把它们分为三类:
- 静态库
- 系统的动态库
- 自定义的动态库
二、静态库
静态库,简单理解就是多个目标文件的集合;
1. 特点
直接提供的是目标文件,不需要重新编译,直接链接即可;
在app编译的时候,已经进行了把库加载进去了,运行的时候,不需要重新加载,所以编译速度相比动态块更快;
三、系统的动态库
就是我们平时在开发中用到的系统的动态库,例如UIKit
、Foundation
等;这类动态库,是由iOS系统提供,供开发者使用的;
1. 特点:
这类动态库不会再app编译的时候就被植入app内部,而是把app的信息植入了app,在app运行的时候去动态查找动态库,并进行链接(这一步被叫做动态链接
)
2. 分类
根据动态库的载入时间,又将动态库分为了两种:
- 动态链接库:在启动app的时候,就立即将动态库进行加载
- 动态加载库:当需要的时候,再使用
dlopen
等通过代码或命令的方式来加载(在程序启动之后
)
四、自定义动态库
就是iOS开发者自定义的framework
;
这类的动态库与系统的动态库有所区别,其会在编译的时候,全部置入app内部,然后再app启动的时候,全部加载,这样就会导致app的体积很大,而且启动的速度慢;
系统动态库和自己编译的动态库本质上是一样的, 只是使用方式不一样. 自己编译的动态库由于签名校验限制, 只能当作静态库一样使用; 系统的动态库不受签名校验限制, 可以动态加载.