我想知道到目前为止您在什么情况下使用了-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。这是一种毫无价值的方法。

编辑

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

编辑#2

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

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

10-09 06:53