或者说,为什么我在暑假期间没有使用retainCount
本文旨在征求关于那个臭名昭著的方法retainCount
的详细描述,以整合SO上流传的相关信息。
基础知识:不使用
retainCount
的官方理由是什么?是否存在任何情况下它可能会有用?应该使用什么代替?**请随意发表评论。历史/解释性内容:如果
retainCount
不打算使用,为什么苹果提供这个方法在NSObject
协议中?苹果的代码是否依赖于retainCount
来实现某种目的?如果是这样,为什么它不被隐藏在某个地方?更深入的了解:对象之所以可能具有与用户代码所假定的不同的保留计数,有什么原因?您能否举出标准过程的示例***,这些过程可能导致框架代码产生这样的差异?是否有任何已知情况,其中保留计数始终与新用户所期望的不同?
关于
retainCount
还有其他值得提及的事情吗?
*
刚接触Objective-C和Cocoa的编程人员经常会苦恼或至少误解引用计数方案。教程中可能会提到保留计数,这些(根据这些解释)在调用retain
、alloc
、copy
等时增加1,在调用release
(和将来某个时间点调用autorelease
)时减少1。
retainCount
是每个对象上都可用的一个方法!Kris调用了几个对象上的retainCount
,这个太高,那个太低,到底怎么回事?于是Kris在SO上发布了一篇文章,“我的内存管理有什么问题?”然后一大群粗体、大号字母降临,说“不要这样做!你不能依赖于结果。”这是好的,但我们勇敢的编码者可能需要更深入的解释。我希望这能成为一个常见问题解答(FAQ),一个好的信息文章/讲座页面,任何愿意写的专家都可以指向新的Cocoa头部,当他们想知道
retainCount
时。*** 在虚拟代码中;显然,普通公众无法访问苹果的实际代码。
retainCount
信息(并学习一些东西!),_特别是_讨论retainCount
存在的原因以及其无用性的示例。不用说,如果您认为这是一个无用的重复问题,请投票关闭,我会删除它! - jscs