我试图学习/理解在使用或创建各种对象时会发生什么以及为什么。 (希望从文档中学习。)
我正在阅读“Objective-C 2.0 中的编程”(第 2 版,Steven Kochan 着)。在第 408 页的第一段中,讨论了保留计数:
所以我阅读了 addObject:
文档:
在那里, 描述缺少 ,而其他项目,如 arrayByAddingObject:
、 声明它 :
引用文献中的哪里表示 addObject:
增加了保留计数?鉴于 ARC 的存在,我仍然应该了解这些方法正在做什么以避免错误和问题。 ARC为此带来了什么? (打算再读一遍……)
最佳答案
通常,您应该在“最全局”的位置查找有关 Cocoa API 中任何内容的信息。由于内存管理在整个系统 API 中无处不在,并且这些 API 在 Cocoa 内存管理策略的实现中是一致的,因此您只需阅读并理解 Cocoa 内存管理指南。
一旦理解,您就可以安全地假设所有系统 API 都实现了该内存管理策略,除非另有明确说明。
因此,对于 NSMutableArray 的 addObject:
方法, 必须对添加到数组的对象进行 retain
,否则将违反该标准策略。
您将在整个文档中看到这一点。这可以防止每个方法的文档都变成一页或更长时间,并且当罕见的方法或类实现某些东西时,无论出于何种原因(有时不太好),规则的异常(exception)情况都会变得很明显。
在内存管理指南的“基本内存管理规则”部分:
您可以使用保留获得对象的所有权。
(2) 是关键; NS{Mutable}Array 必须 retain
任何添加的对象,因为它需要防止添加的对象由于某些副作用而无效。不这样做将与上述规则不同,因此将被明确记录。