如何知道哪些对象保留了对象?

时间:2013-11-04 11:26:18

标签: objective-c automatic-ref-counting

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

虽然使用ARC,但我不知道为什么对象在应该被释放时没有被释放。我想找到哪些对象仍然保留此对象。但是如何?

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

2 个答案:

答案 0 :(得分:3)

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

- (id)retain
{
    return self;
}

并将NSLog或Breakpoint放在那里。

不幸的是,现在有办法显示对象之间的保留关系。

答案 1 :(得分:3)

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

- (id)retain {
    NSLog(@"%@", [NSThread callStackSymbols]);
    return [super retain];
}