【问题标题】:How can I know which objects retain an object?我怎么知道哪些对象保留了一个对象?
【发布时间】:2013-11-04 11:26:17
【问题描述】:

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

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

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

【问题讨论】:

  • 您是如何发现代码中存在一些保留循环的,即使使用了 ARC?
  • 我不知道是否有保留周期。但我确信有一些对象保留了这个对象,预计在某些情况下会被释放。

标签: objective-c automatic-ref-counting


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    - (id)retain
    {
        return self;
    }
    

    并将 NSLog 或 Breakpoint 放在那里。

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

    【讨论】:

      猜你喜欢
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      相关资源
      最近更新 更多