【问题标题】:Watch changes to retain count观察更改以保留计数
【发布时间】:2012-03-15 20:47:43
【问题描述】:

有没有办法在 Xcode 中调试时观察对象的保留计数的变化?

【问题讨论】:

  • 为什么要这样做? retainCount 并不是你想的那样。
  • 你应该never ever触摸retainCount。更详细的解释请看这里:stackoverflow.com/questions/4636146/when-to-use-retaincount
  • 感谢大家的回答。 (请在否决之前让我知道我的问题不好的原因。)
  • 这个问题很好。不知道为什么有人会投反对票。

标签: objective-c debugging xcode4.2


【解决方案1】:

仪器将为您提供最有用的信息形式。 首先使用它。

如果你必须,你可以重写相关的方法来做一些日志记录:

- (oneway void) release {
   DLog(@"%p release", self);
   return [super release];
}

- (id) retain {
    DLog(@"%p retain", self);
    return [super retain];
}

- (id) autorelease {
    DLog(@"%p autorelease", self);
    return [self autorelease];
}

这在 ARC 下可能不起作用,我不确定。

ALSO,正如其他人所指出的,您不应该关心对象的绝对保留计数。您应该只担心您声称拥有并因此需要释放的内容。请参阅:Calling -retainCount Considered Harmful 和 When to use -retainCount?

【讨论】:

  • -retainCount 从来没有必须,它不会为您提供任何相关信息。
  • @Erik:这不是绝对正确的,证据是它包含在 Instruments 中,正如我所指出的。
  • Instruments 中包含的内容比绝对的 retainCount 少得多,而更多的是关于所有使用 retain/release/autorelease 的回溯。只有在这种情况下,retainCount 才有用,但这是一个非常小的细节。
  • @bbum:当然;我在很多场合(包括这里)说过绝对保留计数是没有用的。我不是在这里(或其他任何地方)建议使用-retainCount 本身的结果。 (我想我在这里展示的并行保留计数可以看作是提出了这个建议。)
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多