我对 iOS 上的框架有点困惑。我认为它们基本上是一个包含动态库、 header 和资源的目录。
但在我的设备中,System/Library/Frameworks 中的框架目录不包含动态库。这怎么可能?当需要它的应用程序启动时,它不应该存在并加载到内存中吗?
最佳答案
二进制文件不再存在于设备上(自 iOS 3.1 以来也不存在):Apple 已将它们全部合并到一个大型 mmap()
缓存文件中,以使应用程序启动时间更长一些高效的。由于页面通常永远不会改变,内核可以在每个运行的图像之间有效地共享它们。您仍然可以对缓存中保存的文件使用 dlopen()
,因为当给定的库存在于缓存中时,dyld
会短路文件查找。
缓存文件位于/System/Library/Caches/com.apple.dyld
,并以架构命名(armv6
or armv7
)。可以使用 dsc_extractor 提取其中的库或 KennyTM 的 dyld_decache,可用 in this repository , 但一旦提取出来,它们实际上就不能正确地加载到内存中(因为它们都有效地将它们的符号表合并到缓存中。)
这里有一些更好的(虽然较旧且信息较少,但更深入)的文章:http://blog.howett.net/2009/09/cache-or-check/ .
关于iphone - 文件系统中的 iOS 框架二进制文件在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830488/