iOS经典面试题

iOS静态库与动态库?

  • 静态库:程序在编译时链接到可执行目标文件中,当被多个程序使用时在系统中就有多份拷贝。
  • 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,可多个程序共用,节省内存。
  • 静态库有.a. framework两种形式存在, 动态库有.dylib.framework两种形式。值得注意的是,两种方式的库都可以以 .framework存在,如果是系统级别的像UIKit.frameworkFoundation.frameworkAVFoundation.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体验会好些。

推荐阅读更多精彩内容