Я стал несколько пристраститься к использованию неизменяемых коллекций (главным образом в Clojure, который называет их "стойкими структурами данных" ) и хотел бы иметь возможность программировать этот путь в некоторых контекстах в iOS и OS X.
Ключевым примером того, где это было бы полезно, является возможность "изменить" словарь, создав измененную копию, и чтобы слушатели изменений могли запросить разницу между старыми и новыми значениями, а не пытаться кодифицировать изменение как событие изменения свойства. Неизменяемые структуры данных также являются игровым устройством для параллельного программирования: нет необходимости в блокировках.
Да, вы можете сделать это сейчас, используя неизменяемые экземпляры NSArray
и NSDictionary
, но становится все более неэффективным, чтобы копировать их, чтобы сделать "измененные" версии, поскольку у вас есть большие и большие коллекции и/или часто вносить изменения: небольшое изменение в большой структуре данных приводит к непропорциональному объему работы.
Я ищу способ включить непреложное программирование данных в Objective-C. Чтобы прояснить, как это может выглядеть, и для некоторых других преимуществ, которые предлагает он, исследования Фила Багвелла, упомянутые в этом вопросе SO, имеют большое значение.