Mos*_*szi 110 memory-management objective-c retaincount
我想知道你-retainCount到目前为止在什么情况下使用过,最后使用它可能发生的问题.
谢谢.
Dav*_*ong 243
你永远不应该使用-retainCount它,因为它从不告诉你任何有用的东西.Foundation和AppKit/UIKit框架的实现是不透明的; 你不知道保留了什么,保留它的原因,保留它的人,保留它的时候等等.
例如:
[NSNumber numberWithInt:1]会有1 retainCount个.它没有.这是2.@"Foo"会有1 retainCount个.它没有.这是1152921504606846975.[NSString stringWithString:@"Foo"]会有1 retainCount个.它没有.再次,它是1152921504606846975.基本上,因为任何东西都可以保留一个对象(因此改变它retainCount),并且因为你没有运行应用程序的大多数代码的源代码,所以对象retainCount是没有意义的.
如果您要跟踪对象未被释放的原因,请使用"仪器"中的"泄漏"工具.如果您想要过早地找出对象被解除分配的原因,请使用Instruments中的Zombies工具.
但是不要使用-retainCount.这是一种真正毫无价值的方法.
编辑
请大家访问http://bugreport.apple.com并请求-retainCount弃用.要求的人越多越好.
编辑#2
作为更新,[NSNumber numberWithInt:1]现在有一个retainCount9223372036854775807.如果你的代码期望它是2,你的代码现在已经破了.
Abi*_*ern 50
认真.只是不要这样做.
只需按照内存管理准则,只有释放你alloc,new或者copy(或任何你叫retain后最初).
Jon*_*nah 14
自动释放的对象是一种情况,其中检查-retainCount是无法提供信息并且可能具有误导性.保留计数不会告诉您在对象上调用了多少次-autorelease,因此在当前自动释放池耗尽时将释放多少次.
Egi*_*gil 10
我就用"仪器"检查时发现retainCounts非常有用的.
使用'分配'工具,确保打开'记录引用计数',您可以进入任何对象并查看其retainCount历史记录.
通过配置分配和释放,您可以很好地了解正在发生的事情,并经常解决那些没有发布内容的困难情况.
这从未让我失望 - 包括在iOS的早期测试版中发现错误.
看看NSObject上的Apple文档,它几乎涵盖了你的问题: NSObject retainCount
简而言之,除非你已经实现了自己的引用计数系统(并且我几乎可以保证你没有),keepCount可能对你没用.
用Apple自己的话说,retainCount"在调试内存管理问题上通常没有价值".