2

有没有办法知道哪些对象保留了目标对象?

尽管使用了 ARC,但我不知道为什么一个对象没有在应该被释放的时候被释放。我想找出哪些对象仍然保留这个对象。但是怎么做?

我确实尝试过使用 Instruments,但没有内存泄漏问题。我检查了整个项目,但没有发现任何保留周期。我怎么知道哪些对象保留了这个对象?

4

2 回答 2

3

您可以在您认为未发布的类中实现此方法:

- (id)retain
{
    return self;
}

并将 NSLog 或 Breakpoint 放在那里。

不幸的是,现在有一种方法可以显示对象之间的保留关系。

于 2013-11-04T11:31:18.467 回答
3

您可以覆盖保留方法并记录调用堆栈。这将记录调用堆栈回溯:

- (id)retain {
    NSLog(@"%@", [NSThread callStackSymbols]);
    return [super retain];
}
于 2013-11-04T11:32:05.050 回答