我正在尝试深入了解在Cocoa中跟踪模型对象更改的最小开销解决方案。
我认为有三种选择:
使用核心数据 - 监控模型对象更改(Core Data NSManagedObject - tracking if attribute was changed)存在很多功能。我不知道Core Data的管理基础架构的开销与其他方法相比是多少,但它已经建立了良好的多线程支持架构。对于跨平台的开发人员来说,没有一个易于访问的架构存在一些缺点,但是有很多方法可以解决这个问题。
编写自定义访问器,在使用新值更新字段时将对象标记为脏。很长一段时间以来,我一直在使用这种技术并取得了成功。跨线程共享对象时,有一些棘手的问题需要处理。您也没有获得自动合成属性等增强功能的好处。但是,与使用可能有益的核心数据相比,您可以更好地控制数据存储(例如,某些操作可以在SQL存储以更有效的方式跨越许多对象)。注意:这里可能存在很多变化,具体取决于您如何编写访问器。为了对话,让我们假设setter检查新值对旧的,对KVO进行适当的调用(willChange / didChange),并设置一个布尔标志(当然都在同步中)。
使用KVO监视对象字段(ala keyPathsForValuesAffectingValueForKey :)并在KVO标注中将对象标记为脏。我还没有使用这种方法,但它似乎是一个体面的方法。每次调用一个setter时,明显的缺点是标注。
我倾向于认为选项2具有最低的开销(就原始处理要求而言),因为Core Data和KVO在生成的访问者或KVO标注中都有一些额外的开销。问题是,开销有多大?
最后,我错过了一个选项吗?
感谢。