all*_*nli 4 frameworks ios dynamic-frameworks
根据我的研究,iOS使用大多数(所有)系统框架作为动态框架。应用启动时,iOS是否会全部加载它们?还是iOS可能在以后iOS真正需要框架时加载它?
在应用启动时加载它的优点:当iOS在动态框架中调用函数时,可以节省更多时间。
延迟加载的优点:节省更多内存。
还是iOS可能在以后iOS真正需要框架时加载它?
关于动态链接的Wikipedia页面涵盖了各种流行的操作系统的一般思想和许多细节。它说(部分)关于达尔文,包括macOS和iOS:
macOS和iOS平台上的可执行文件通常在执行过程中与动态链接器进行交互。甚至还知道可执行文件可能会与动态链接器进行交互,从而导致它在最初启动后的几个小时内加载更多的库并解析更多的符号。
此外,如果您阅读了dyld动态加载程序的手册页,则会发现一个名为的环境变量DYLD_BIND_AT_LAUNCH,其描述如下:
设置此选项后,动态链接器将在启动时绑定程序需要的所有未定义符号。这包括通常在第一次调用时就可以延迟绑定的功能符号。
最后的证据是在Apple的“动态库概述”文档中,该文档部分说明:
启动应用程序时,OS X内核将应用程序的代码和数据加载到新进程的地址空间中。内核还将动态加载程序(/ usr / lib / dyld)加载到进程中,并将控制权传递给该进程。然后,动态加载程序将加载应用程序的依赖库。这些是与应用程序链接的动态库。静态链接器在链接应用程序时记录每个从属库的文件名。该文件名称为动态库的安装名称。
在下一段中:
动态加载程序仅解析应用在启动过程中实际使用的未定义外部符号。直到应用程序使用其他符号为止,其他符号仍然无法解析。
考虑到所有这些,听起来iOS可能会在启动应用程序的过程中加载每个动态框架,但是实际上推迟了将应用程序中未定义的名称绑定到框架中的定义,直到真正需要它为止。
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |