在Obj-C中查找对象实例的所有引用

时间:2011-08-08 21:34:24

标签: objective-c memory

我正在尝试追踪一些错误,其中一个与内存泄漏有关。这是一个我可以告诉它的东西仍然有参考的对象,因为Instruments仍然将它显示为活着,但是仪器并没有将其注册为泄漏。

无论如何,在Objective-C中查看对象的实例并查看其他对象是否仍然具有对该对象的引用?

3 个答案:

答案 0 :(得分:8)

我建议使用Allocations / ObjectAllocations Instruments模板,然后在右上角键入对象的类名(在“类别”字段中)。

然后,您可以按照建议查看分配增加情况,并查看扩展详细信息,了解分配的位置。

此点以下的所有内容均由OP(joshbuhler

添加

在下面的屏幕截图中,将过滤器更改为“Objects List”,然后通过单击对象地址右侧的小箭头,将显示内存事件的历史记录(alloc / retain / release / dealloc)对于那个对象。它不会准确显示挂在该对象上的内容,但它会为您提供一些非常有用的信息来跟踪它。

enter image description here

答案 1 :(得分:0)

如果您正在使用xCode,则可以使用性能工具查找内存泄漏。这将为您提供一个很好的所有内存分配图表,如果它们被释放或泄露。

xcode - >跑 - >从性能工具开始 - >泄漏。

Memory leak detection tools

答案 2 :(得分:0)

警示尾巴::) 在搜索内存泄漏的过程中,我在Xcode中设置了一个断点(实际上是一个logpoint),它会在触发时记录self的值troublesome logpoint image。与此同时,我发现了泄漏并对其进行了修补,但内存使用情况并没有达到平衡,而且我的de-init从未被调用过。我之前设置的logpoint实际上导致我的对象的保留计数增加,反过来又阻止了de-init被调用。经过几个小时的疯狂追逐后,我碰巧发现了这一点,最终逐步逐步完成了对象的方法,从调试控制台发出了CFGetRetainCount(self)。当我使用logpoint跨过该行时,保留计数上升。起初我认为这是我的代码的一些奇怪的副作用。我移动了该logpoint,以便我可以在该行上设置一个正常的断点,并且我的问题随之移动。我禁用了logpoint,泄漏消失了。希望这可以帮助别人。