首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候使用-retainCount?

什么时候使用-retainCount?
EN

Stack Overflow用户
提问于 2011-01-09 05:07:15
回答 11查看 24.6K关注 0票数 112

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

谢谢。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 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,那么你的代码现在已经崩溃了。

票数 247
EN

Stack Overflow用户

发布于 2011-01-09 05:09:31

绝不可能!

我是认真的。不要这样做。

只需遵循Memory Management Guidelines,只发布您的allocnewcopy (或最初调用retain的任何内容)。

@bbum说它最好的是here on SO,甚至在his blog上更详细。

票数 51
EN

Stack Overflow用户

发布于 2011-01-09 05:25:23

自动释放的对象是检查-retainCount的一种情况,它没有提供任何信息,并且可能会产生误导。保留计数不会告诉您在一个对象上调用了多少次-autorelease,因此当当前自动释放池耗尽时,它将被释放多少次。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4636146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档