我有一种情况,我必须生成一系列对象,然后一次将它们传递回应用程序(想想基于块的或快速枚举)。
但是,每个对象的生成成本都会相对较高,因此我正在寻找避免这种成本的方法。
碰巧是这样,给定序列的一个对象,下一个对象可以通过对前者的简单修改来有效地生成。出于这个原因,很容易“作弊”,只创建一个对象,然后不断将同一个对象传递回应用程序,并且只在序列的每一步“幕后”进行“廉价”修改.
当然,问题是应用程序可能会选择(并且应该允许)在其他地方存储对某些或所有对象的引用。如果这样做,那么真正的独特对象序列的“幻觉”就会崩溃。
如果 Objective-C 允许,解决这个问题的一种巧妙方法是检测应用程序何时确实在其他地方存储引用,并且无论何时发生这种情况,在应用生成下一个元素的修改之前,用它自己的副本替换对象在序列中。
我不知道这个成语的正式名称是什么,但我们可以称之为“copy on write if leaked”、“copy on write if shared”,或者简称为“copy on write”。
我的问题是:启用 ARC 的 Objective-C 是否允许实现这样的习语?
而且,在 Objective-C 中解决这类问题是否是正确的方法?
我确实注意到启用 ARC 后,我无法从对象中提取引用计数,也无法覆盖增加和减少它的方法。
编辑:我注意到有一个copy
属性可以应用于属性,但我很难弄清楚。你们中的任何人都能够解释它是如何工作的吗?
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#property-declarations