iOS经典面试题
2019-08-06 本文已影响9人
ptlCoder
iOS静态库与动态库?
- 静态库:程序在编译时链接到可执行目标文件中,当被多个程序使用时在系统中就有多份拷贝。
- 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,可多个程序共用,节省内存。
- 静态库有
.a
和. framework
两种形式存在, 动态库有.dylib
和.framework
两种形式。值得注意的是,两种方式的库都可以以.framework
存在,如果是系统级别的像UIKit.framework
、Foundation.framework
、AVFoundation.framework
等,这类都是系统的动态库。在正常的开发过程中,用户是无法使用动态库的,考虑到安全性的问题吧苹果是禁止我们开发者使用它,无法上架App Store。 - 区分一个
.framework
是静态库还是动态库: 可以直接使用命令行的方式, 用file命令查看
cd .../ABC.framework
file ABC
在第一行如果你看到类似[arm_v7:current ar archive]
,那就表明这是一个静态库,如果是Mach-O dynamically linked shared library x
那就表明是一个动态库。
-
.a
文件是一个二进制的文件,使用它的时候必须外在暴露.h
文件配合使用,否者无法使用,而.framework
除了二进制文件外,还包含了一些资源文件,比如plist文件等,头文件也包含在其中,可以直接使用。当库中使用到图片资源时,都会把它们放入到一个同名的.bundle
文件中。.framework
库里面是不能直接包含图片资源的,系统并不会去扫描里面的图片资源,故无法加载显示。 - 相对
.a
比.framework
在制作过程中繁琐,暴露的.h
头文件会比较多,建议使用.framework
体验会好些。