如何确定哪些对象持有对在objective-c中导致内存泄漏的其他对象的引用?

xco*_*der 10 memory-leaks memory-management objective-c cocos2d-iphone

我曾尝试使用泄漏工具,并"分析"等找到泄漏,但它找不到它.使用分配我可以确定未被释放的对象.

我注意到(通过在dealloc方法中添加调试语句),没有为这些对象调用dealloc.

如何确定哪些对象持有对这些对象的引用并阻止它们被释放?

zap*_*aph 11

如果您需要查看对象使用工具的保留,释放和自动释放的位置:

在仪器中运行,在分配中设置"记录参考计数"(您必须停止记录以设置选项).导致选择器运行,停止记录,搜索那里的ivar(datePickerView),向下钻取,你将能够看到所有保留,释放和自动释放发生的位置.

在此输入图像描述

  • 对于任何想知道的人,"记录引用计数"选项隐藏在左窗格中"分配"旁边的"i"后面http://snag.gy/F39G0.jpg (7认同)

xco*_*der 2

分析工具无法检测到问题。使用分配工具捕获所有引用计数是一个开始,但是有很多我无法识别或直接访问的类,我无法使用此方法找到问题。相反,我把自己直接负责的类列了一个清单,逐行排查,直到发现问题。原因是我使用了一些第三方库,它们没有按预期减少某些对象的保留计数。我想在这种情况下,遵循更好的软件工程原则/设计模式,并进行彻底的代码审查可能会更早地发现问题。

  • 是的,最终仔细的编码实践和彻底的代码审查是捕获大多数这些错误(以及许多其他错误)的最佳方法。 (2认同)