【发布时间】:2012-12-18 03:45:17
【问题描述】:
下午好,
我正在对即将发布的 iOS 应用程序进行一些 Instruments 测试,但我注意到一些非常奇怪的内存泄漏,似乎来自系统库。
当我运行 Instruments 时,我得到了这个泄漏:
从我的角度来看,这非常奇怪!我查看了这些泄漏的调用树,它们似乎都是深度 C++ 系统调用。
更让我困惑的是,这个项目启用了 ARC,我通过分析器运行它,没有出现任何问题。 更奇怪的是,这不会发生在模拟器上,也不会发生在我真正的 iPad 上,但在我的 iPhone 上会发生这个问题。
当我选中“仅显示 Obj-C”和“隐藏系统库”时,调用跟踪消失了,这让我相信我的代码不对泄漏负责。
为什么会发生这种情况,我可以做些什么来解决它?
谢谢大家。
【问题讨论】:
-
我要让你失望了:Apple 的代码不是没有错误的。 C++ 标准库中确实可能存在内存泄漏。
-
感谢您的帮助!但是让我感到困惑的一件事是,如果是这种情况(Apple 的代码存在内存泄漏),这不会也出现在 iPad Instruments 运行中吗?
-
我不会因为这个太自责。就像@H2CO3 所说,Apple 的库并不完美。这不是第一次在他们的一个库中发现内存泄漏。实际上,这种情况经常发生。
-
@user1274223 您正在测试哪个版本的 iPad 和 iPhone?如果您使用 iPhone 5 和较旧的 iPad 进行测试,可能是为 armv7x 编译的库中存在错误,而为 armv7 编译的库很好。
-
我了解您希望您的代码不泄漏。同时,您无法修复您无权访问的代码。就 iOS 5.1 设备的使用情况而言,我不确定我们在这里谈论的是什么数字。
标签: objective-c ios memory-leaks automatic-ref-counting