库
写在前面:由于之前很多东西都没去学习,这段时间就开始学点之前不是很了解的东西,下面把网上查到关于库的知识总结一下,以加深记忆。
库的概念
库是程序代码的集合,是共享程序代码的一种方式。
库的分类
一.开源库:公开源代码,能看到具体的实现(SDWebImage,AFNetworking等)。
二.闭源库:顾名思义,就是不公开源代码,是经过编译后的二进制文件,看不到具体的实现。(静态库,动态库)
静态库和动态库
静态库和动态库是相对编译期和运行期的,静态库在程序编译时会被链接道目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接道目标代码中,只是程序运行时才被载入,因为程序运行期间还需要动态库的存在。
1.存在形式
静态库:.a 和 .framework
动态库:.dylib 和 .framework
2.区别
静态库:链接时,静态库会被完全复制到可执行文件中,被多次使用就会存在多次拷贝(一夫一妻制😄)。
动态库:链接时,不会被复制,只有程序运行期才由系统动态加载到内存,供程序调用,系统只会载入一次,多个程序共用,节省内存。(一夫多妻制😄)
3.优点
静态库:
(1).模块化,分工合作,提高了代码的复用以及核心技术的保密程度。
(2).避免少量改动经常大量的重复编译链接。
(3).也可复用。(注意:不是共享使用)
动态库:
(1).可以将最终可执行文件体积缩小,将整个应用程序分模块,团队合作,进行分工,影响较小。
(2).多个应用程序共享内存中得同一份库文件,节省资源。
(3).可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
(4).应用插件化。
(5).软件版本实时模块升级。
(6).共享可执行文件 在其它大部分平台上,动态库都可以用于不同应用间共享,这就大大节省了内存。
注意:iOS8之前由于动态库是私有的,所以项目中如果使用了自制的动态库,不能被上传到AppStore;iOS8之后有很多动态的framework,只是你需要和你的代码一起打包提交苹果审查。貌似目前在程序运行期,去服务器下载一个动态库再动态使用会被拒!(不知道有不有试过的猿友?)
欢迎大家补充!当然,写得不妥的地方欢迎吐槽,一起讨论,共同进步!