NSManagedObject: Должен ли я использовать переходный или обычный @property? - PullRequest
2 голосов
/ 01 января 2012

Почему бы просто не использовать обычный @property вместо transient?Меня не волнует поддержка отмены.

1 Ответ

3 голосов
/ 01 января 2012

Если вам не нужна отмена, есть хороший шанс, что простой немоделированный @property лучше. При явном моделировании свойства как переходного, основными различиями являются:

  • Установка свойства помечает объект как грязный, даже если на самом деле ничего не будет сохранено;
  • Свойство очищается, когда объект превращается в ошибку;
  • При объединении изменений могут происходить странные вещи в зависимости от выбранной вами стратегии объединения.

Некоторые эксперименты по разработке семантики переходного смоделированного свойства могут быть найдены в https://web.archive.org/web/20160423093331/http://www.2pi.dk/tech/cocoa/transient_properties.html Якобом Стоклундом Олесеном. Поскольку это умирающая ссылка на archive.org, я приведу несколько отрывков:

  • "Переходное свойство ... Вы должны думать о нем как о чем-то , чье значение в постоянном хранилище равно нулю. "

  • "Итак, для чего нужны переходные свойства? ... [для] любого свойства, которое вам не нужно хранить, но вы хотите отменить поддержку."

  • "Другое использование ... - это кэширование свойств, которые не могут быть сохранены. Типичными примерами являются взаимосвязи между хранилищами и атрибуты с неподдерживаемыми типами. Перед сохранением вы преобразуете свойство в нечто, что можно сохранить и запишите его в двоичный атрибут 'shadow'. "

  • «Лучше представить временные свойства как представляющие« нечто, равное нулю в постоянном хранилище », чем обычные« причудливые переменные экземпляра с отменой ». *

Хорошая статья, и я бы хотел, чтобы Якоб оставил ее.

...