二进制解决的什么问题:虽然使用了组件化, 但依然是源码, 如果工程庞大, 编译速度依然非常慢,所以, 可以直接把私有库打包成为一个库文件, 进行使用。
一、什么是库?
库 就是程序代码的集合, 是共享程序代码的一种方式。
二、库的分类?
-
开源库:公开源代码, 能看到具体实现。例如MJExtension, MJRefresh, AFNetworking...。
-
闭源库:不公开源代码, 是经过编译后的二进制文件, 看不到具体实现。主要分为: 静态库 和 动态库
三、静态库的存在形式?
.a 和 .framework
四、动态库的存在形式?
.dylib(后来.tbd)(从本质上说tbd是个描述文件,它里面是关联dylib动态库的)
.framework
五、静态库和动态库的区别?
-
静态库在链接时, 会被完整的复制到可执行文件中; 被多次使用, 就有多份拷贝;
-
动态库则不会复制, 只有一份. 程序运行时动态加载到内存; 系统只加载一次, 多个程序共用, 节省内存;
-
但是!!!! 项目中如果使用到自己的动态库, 不允许上架!
- 再但是!!! WWDC2014上公布的 苹果对ios8开放动态加载dylib的接口 也就是说 开放了动态库挂载。
六、静态库应用场景?
-
保护自己的核心代码。国内的企业,掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用。例如:百度地图,友盟,JPush等
-
将MRC的项目,打包成静态库,可以在ARC下直接使用,不需要转换。(编译好的文件不存在内存泄露,所以.a文件可以直接在ARC和MRC下使用)
-
提高工程的编译速度。
七、静态库的特点?
.a + .h;(.a就是实现文件,.h是接口文件)
看不到具体实现的代码;
网友评论