我想知道你到目前为止在什么情况下使用-retainCount,以及最终使用它可能会发生的问题。
谢谢。
发布于 2011-01-09 06:20:04
您永远不应该使用-retainCount,因为它不会告诉您任何有用的信息。Foundation和AppKit/UIKit框架的实现是不透明的;您不知道要保留什么、为什么要保留、谁在保留、何时保留等等。
例如:
[NSNumber numberWithInt:1]的retainCount为1,但事实并非如此。它是2。@"Foo"的retainCount为1。其实不然。It's [NSNumber numberWithInt:1]的<retainCount>d12为1。其实不然。同样,它是基本上,由于任何东西都可以保留对象(并因此更改其retainCount),而且您没有运行应用程序的大多数代码的源代码,因此对象的retainCount是没有意义的。
如果您试图追踪对象未被释放的原因,请使用Instruments中的Leaks工具。如果你想找出为什么一个对象过早地被释放,可以使用Instruments中的僵尸工具。
但是不要使用-retainCount。这是一种真正毫无价值的方法。
编辑
请大家到http://bugreport.apple.com上请求弃用-retainCount。提出要求的人越多越好。
编辑#2
作为更新,[NSNumber numberWithInt:1]现在的retainCount为9223372036854775807。如果你的代码期望它是2,那么你的代码现在已经崩溃了。
发布于 2011-01-09 05:09:31
绝不可能!
我是认真的。不要这样做。
只需遵循Memory Management Guidelines,只发布您的alloc、new或copy (或最初调用retain的任何内容)。
@bbum说它最好的是here on SO,甚至在his blog上更详细。
发布于 2011-01-09 05:25:23
自动释放的对象是检查-retainCount的一种情况,它没有提供任何信息,并且可能会产生误导。保留计数不会告诉您在一个对象上调用了多少次-autorelease,因此当当前自动释放池耗尽时,它将被释放多少次。
https://stackoverflow.com/questions/4636146
复制相似问题