我想知道Xcode 5的Instruments.app中显示的“Leaks”和“Allocations> #Living”之间的区别是什么。我使用iprofiler
命令检查使用Clang ++构建的C ++命令行应用程序的内存泄漏,并使用Instrunents.app打开.dtps
文件。
$ iprofiler -leaks ./a.out
$ open a.dtps
正如您在附带的屏幕截图中看到的那样,存在166.61 MB的大容量内存。 Apple解释说“#Living”是“在所选时间范围内创建的分配数量,并且仍然存在于其末尾”。听起来“#Living”表示内存泄漏量。
但我没有在应用程序窗口的“泄漏”选项卡中看到此“泄漏”。 “泄漏”和“#Living”之间有什么区别?
答案 0 :(得分:2)
已分配且仍然存在的对象是那些仍然被应用程序使用并且引用被保留的对象。使用此编号,您可以识别仍然保留的对象,从而耗尽内存。分配分析可帮助您改善内存使用问题。他们并没有泄露暴徒,但仍被引用。
泄漏是您的应用中不再引用和访问的对象。所以对象,从未分别被释放或释放。
答案 1 :(得分:0)
感谢罗布(Rob)在对此question的评论中指出,我发现了这个WWDC 2012: iOS App performance: Memory; Minute 30。确保您完整地看到了问题和WWDC视频。
简而言之,内存增长的发生可能有以下三个原因:
分配是一个更广泛的术语。
DispatchSourceTimer
由GCD强烈指向,等等。有关更多信息,请参见here。 分配将帮助您识别这一点。 泄漏无法检测到。您真的需要了解:
当有两个(或多个)对象之间只有强引用时,会产生强引用周期(也称为泄漏)警告。废弃的内存或缓存的内存都不是!