objective-c - 何时使用 -retainCount?

标签 objective-c memory-management retaincount

我想知道您目前在什么情况下使用-retainCount,以及最终使用它可能会出现的问题。

谢谢。

最佳答案

你永远不应该使用 -retainCount,因为它永远不会告诉你任何有用的东西。 Foundation 和 AppKit/UIKit 框架的实现是不透明的;您不知道要保留什么、为什么要保留、谁在保留、何时保留等等。

例如:

  • 您会认为 [NSNumber numberWithInt:1]retainCount 为 1,但事实并非如此。现在是 2。
  • 您会认为 @"Foo"retainCount 为 1,但事实并非如此。是 1152921504606846975。
  • 您会认为 [NSString stringWithString:@"Foo"]retainCount 为 1,但事实并非如此。同样,它是 1152921504606846975。

基本上,因为任何东西都可以保留一个对象(并因此改变它的 retainCount),并且由于您没有运行应用程序的大多数代码的源代码,所以一个对象的 retainCount 没有意义。

如果您试图找出一个对象没有被释放的原因,请使用 Instruments 中的 Leaks 工具。如果您想找出一个对象被过早释放的原因,请使用 Instruments 中的 Zombies 工具。

但不要使用 -retainCount。这是一个真正毫无值(value)的方法。

编辑

请大家转至http://bugreport.apple.com并要求弃用 -retainCount。要求的人越多越好。

编辑#2

作为更新,[NSNumber numberWithInt:1] 现在的 retainCount 为 9223372036854775807。如果您的代码预期为 2,那么您的代码现在已损坏。

关于objective-c - 何时使用 -retainCount?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4636146/

相关文章:

objective-c - 在仅单例类的非初始化方法名称中使用 'init' 的 ARC 含义是什么

ios - NSFetchRequest 返回的数组计数错误

ios - 解码一个巨大的 NSString,内存不足

objective-c - 用于多对多关系的 Objective C @property

ios - 使用 Storyboard 和 Autolayout 旋转到横向后,UIScrollView 中的 UIButtons 不可触摸?

c++ - 删除数组 - 检测到堆损坏

c - 执行 fork() 时在某些内存页上禁用写时复制(COW)

objective-c - 何时使用-retainCount?

memory - 在 RxSwift 闭包上使用 'self' ...实例方法作为参数怎么样?