1

我在 iPhone 上遇到了一些内存泄漏问题(想象一下),并且我有一个保留计数为 10 的自定义对象。

有什么方法可以知道哪些代码触发了特定对象实例的保留计数增加?如果这很重要,我正在使用 GHUnit。

4

4 回答 4

3

尝试使用Build & Analyze. 它通常可以告诉你一个对象是否被保留而不是释放。/

于 2010-11-06T22:01:59.567 回答
2

泄漏工具(XCode 中的“工具”之一)能够分析这类事情,但我认为您不能以编程方式进行。

这是一个很棒的教程:http: //mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/

(更新总结评论):如果您想在保留方法中设置断点(查看堆栈跟踪),您可以覆盖保留方法。

于 2010-11-06T22:00:03.607 回答
2

保留计数几乎是无用的——如果某个语句在语句中得到retained 和autoreleased,那完全没问题,但它的保留计数会增加 1。

如果您想准确找到特定对象的retain编辑位置,请覆盖类的retain实现以测试您的对象,并在此处设置断点:

@implementation MyClass
-(id) retain
{
    if(self == ObjectThatImTracking)
        NSLog(@"[ObjectThatImTracking retain]\n");  // put a breakpoint here
    return [super retain];
}

然后在调试器中运行你的程序并在断点被命中时查看调用堆栈。

于 2010-11-06T22:08:17.053 回答
0

您是否试图在模块中找到您班级的所有保留案例?也许它有帮助..

于 2010-11-06T22:03:44.220 回答