【发布时间】:2011-08-12 15:33:56
【问题描述】:
或者,为什么我没有在暑假使用retainCount
这篇文章旨在征集有关 retainCount 这种臭名昭著的方法的原因和原因的详细文章,以整合围绕 SO 的相关信息。*
基础知识:不使用
retainCount的官方原因是什么?是否有任何可能有用的情况根本?应该怎么做?** 随意编辑。历史/解释:如果 Apple 不打算使用它,为什么要在
NSObjectprotocol 中提供此方法? Apple 的代码是否出于某种目的依赖retainCount?如果是这样,为什么不把它藏在某个地方?为了更深入地了解:对象的保留计数可能与用户代码中假设的不同的原因是什么?您能否给出框架代码可能使用的标准过程的任何示例***,这些示例会导致这种差异?是否存在保留计数总是与新用户预期不同的已知情况?
关于
retainCount,您认为还有什么值得一提的吗?
*
不熟悉 Objective-C 和 Cocoa 的编码人员经常努力解决或至少误解引用计数方案。教程解释可能会提到保留计数,当您调用 retain、alloc、copy 等时,保留计数(根据这些解释)会增加一,当您调用 release 时会减少一(在某些情况下)当您拨打autorelease时指向未来。
一个崭露头角的 Cocoa 黑客 Kris,因此很容易得出这样的想法:检查对象的保留计数将有助于解决一些内存问题,而且,你瞧,每个对象都有一个可用的方法,称为 @ 987654334@! Kris 在几个对象上调用retainCount,这个太高了,那个太低了,这到底是怎么回事?!所以 Kris 在 SO 上发了一个帖子,“我的内存管理出了什么问题?”然后一大群
我希望这会变成一个常见问题解答,一页来自我们任何一位愿意写一篇文章的专家的优秀信息论文/讲座,当他们想知道时,可以指出新的 Cocoa-heads关于retainCount。
** 我不想把它说得太宽泛,但是来自经验的具体提示或有关验证/调试保留和释放配对的文档可能适合此处。
***在虚拟代码中;显然,公众无法访问苹果的实际代码。
【问题讨论】:
-
我发现了这个最近的问题:stackoverflow.com/questions/4636146/when-to-use-retaincount 和 Dave DeLong 的非常有用的答案,但正如我所说,我希望为
retainCount信息创建一个中心位置(并自己学习一些东西!),特别讨论了retainCount存在的原因及其无用的示例。不言而喻,但如果您认为这是一个无用的欺骗,请投票关闭,我将删除它! -
因为:'你可以在一个类中重写这个方法来实现你自己的引用计数方案。 '
-
+1 用于 Dijkstra 参考。
-
@Stefan:这很好。我希望您稍后会考虑将其扩展为答案(无论多么简短)。
-
@Bavarious:谢谢。不过,这似乎是显而易见的举措。
标签: objective-c cocoa reference-counting retaincount