我有一种情况,我必须生成一系列对象,并将它们一次传递给一个应用程序(想想基于块或快速枚举)。
但是,每个对象的生成成本相对较高,所以我正在寻找避免这种成本的方法。
恰好是这种情况,给定序列的一个对象,可以通过对前者的简单修改来有效地生成下一个对象。出于这个原因,通过仅创建一个对象来“欺骗”,然后继续将同一个对象传递回应用程序,并且仅在序列中的每个步骤执行“在场景后面”的“廉价”修改
问题是,当然,应用程序可以选择(并且应该允许)存储对其他地方的某些或所有对象的引用。如果它这样做,真正的一系列独特对象的“幻觉”就会崩溃。
如果Objective-C允许,解决此问题的一种巧妙方法是检测应用程序何时实际存储其他地方的引用,并且每当发生这种情况时,在应用产生的修改之前,用自身的副本替换该对象。序列中的下一个元素。
我不知道这个成语的官方名称是什么,但是我们可以将其称为“如果泄露则写入时复制”,“如果共享则复制写入”,或者只是“写入时复制”。
我的问题是:启用ARC的Objective-C是否允许实现这样的习惯用法?
而且,它甚至是在Objective-C中解决此类问题的正确方法吗?
我注意到启用ARC后,我无法从对象中提取引用计数,也无法覆盖递增和递减它的方法。
编辑:我注意到有一个copy
属性可以应用于属性,但我很难搞清楚。你们中的任何一个人都能解释它是如何运作的吗?
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#property-declarations