我想知道到目前为止您在什么情况下使用了-retainCount,最终想知道使用它时可能发生的问题。

谢谢。

最佳答案

您永远不要使用-retainCount,因为它永远不会告诉您任何有用的信息。 Foundation和AppKit/UIKit框架的实现是不透明的。您不知道要保留的内容,为什么要保留它,谁要保留它,何时保留它,等等。

例如:

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

  • 基本上,由于任何事物都可以保留对象(并因此更改其retainCount),并且由于您没有运行应用程序的大多数代码的源代码,因此对象的retainCount是没有意义的。

    如果您要查找为什么未释放对象的原因,请使用仪器中的“泄漏”工具。如果您试图找出为什么对象被过早释放的原因,请使用Instruments中的“僵尸”工具。

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

    编辑

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

    编辑#2

    作为更新,现在[NSNumber numberWithInt:1]retainCount为9223372036854775807。如果您的代码原本希望它是2,则您的代码现已损坏。

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

    10-10 11:18