我在 iPhone 上遇到了一些内存泄漏问题(想象一下),并且我有一个保留计数为 10 的自定义对象。
有什么方法可以知道哪些代码触发了特定对象实例的保留计数增加?如果这很重要,我正在使用 GHUnit。
我在 iPhone 上遇到了一些内存泄漏问题(想象一下),并且我有一个保留计数为 10 的自定义对象。
有什么方法可以知道哪些代码触发了特定对象实例的保留计数增加?如果这很重要,我正在使用 GHUnit。
尝试使用Build & Analyze
. 它通常可以告诉你一个对象是否被保留而不是释放。/
泄漏工具(XCode 中的“工具”之一)能够分析这类事情,但我认为您不能以编程方式进行。
这是一个很棒的教程:http: //mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/
(更新总结评论):如果您想在保留方法中设置断点(查看堆栈跟踪),您可以覆盖保留方法。
保留计数几乎是无用的——如果某个语句在语句中得到retain
ed 和autorelease
d,那完全没问题,但它的保留计数会增加 1。
如果您想准确找到特定对象的retain
编辑位置,请覆盖类的retain
实现以测试您的对象,并在此处设置断点:
@implementation MyClass
-(id) retain
{
if(self == ObjectThatImTracking)
NSLog(@"[ObjectThatImTracking retain]\n"); // put a breakpoint here
return [super retain];
}
然后在调试器中运行你的程序并在断点被命中时查看调用堆栈。
您是否试图在模块中找到您班级的所有保留案例?也许它有帮助..