我已经有点沉迷于使用不可变集合(主要是在 Clojure 中,它称它们为“持久数据结构”),并且希望能够在 iOS 和 OS X 上的某些上下文中以这种方式编程。
这很有用的一个关键示例是能够通过创建修改后的副本来“更改”字典,并让更改侦听器能够查询旧值和新值之间的差异,而不是尝试将更改编码为属性更改事件。不可变数据结构也是并发编程的游戏规则改变者:不需要锁。
是的,您现在可以使用不可变NSArray
和NSDictionary
实例来执行此操作,但是当您拥有越来越大的集合和/或频繁进行更改时,复制它们以制作“更改”版本变得越来越低效:然后对大型数据结构进行小改动涉及不成比例的工作量。
我正在寻找一种在 Objective-C 中启用不可变数据编程的方法。为了澄清这可能是什么样子,以及它提供的更多优势,Phil Bagwell 在这个 SO 问题中引用的研究是高度相关的。