-
一、什么是库?
库是共享程序代码的方式,一般分为静态库和动态库。
二、静态库与动态库的差别?
静态库:链接时完整地拷贝至可运行文件里。被多次使用就有多份冗余拷贝。
动态库:链接时不复制。程序执行时由系统动态载入到内存,供程序调用,系统仅仅载入一次,多个程序共用。节省内存。
三、iOS里静态库形式?
.a和.framework
四、iOS里动态库形式?
.dylib和.framework
五、framework为什么既是静态库又是动态库?
系统的.framework是动态库,我们自己建立的.framework是静态库。
六、a与.framework有什么差别?
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件能够直接使用。
.a + .h + sourceFile = .framework。
建议用.framework.
七、为什么要使用静态库?
方便共享代码。便于合理使用。
实现iOS程序的模块化。
能够把固定的业务模块化成静态库。
和别人分享你的代码库,但不想让别人看到你代码的实现。
开发第三方sdk的须要。
八、制作静态库时的几点注意:
1 注意理解:不管是.a静态库还.framework静态库,我们须要的都是二进制文件+.h+其他资源文件的形式,不同的是,.a本身就是二进制文件,须要我们自己配上.h和其他文件才干使用。而.framework本身已经包括了.h和其他文件。能够直接使用。
2 图片资源的处理:两种静态库,一般都是把图片文件单独的放在一个.bundle文件里,一般.bundle的名字和.a或.framework的名字同样。
.bundle文件非常好弄,新建一个目录,把它改名为.bundle就能够了。右键,显示包内容能够向当中加入图片资源。
3 category是我们实际开发项目中经经常使用到的,把category打成静态库是没有问题的,可是在用这个静态库的project中。调用category中的方法时会有找不到该方法的执行时错误(selector not recognized)。解决的方法是:在使用静态库的project中配置other linker flags的值为-ObjC。
4 假设一个静态库非常复杂。须要暴露的.h比較多的话。就能够在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字同样),然后把全部须要暴露出来的.h文件都集中放在这个.h文件里,而那些原本须要暴露的.h都不须要再暴露了,仅仅须要把.h暴露出来就能够了。