我想知道您目前在什么情况下使用-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/