iphone - 文件系统中的 iOS 框架二进制文件在哪里?

标签 iphone ios jailbreak

我对 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/

相关文章:

ios - 无需通过 AppStore 安装 iOS 应用程序

ios - UIEventSubtype 缺少元素

java - 从 Java 学习 iPhone 编程的最佳方法是什么?

iphone - 我刚刚更新了我的 iOS 项目名称,现在 "appName-Info.plist"文件是 "missing"

ios - NSMutableString 不适用于 HTML 文本

android - 在移动应用程序上注册帐户

ios - 谷歌地图不适合 subview

ios - 如何在越狱的 iOS 中将屏幕全局旋转到指定方向(即使使用私有(private) api)?

iphone - 如何取消已经触发的非重复 NSTimer?

ios - ALAsset 指针在访问时抛出 EXC_BAD_ACCESS