Каков наилучший шаблон проектирования для распределения изменения свойств в подпредставлениях?

Предположим, у меня есть настройка в NSuserdefaults, которая должна влиять на свойство многих (но не всех) объектов UIView, например размер шрифта. Параметр также может быть изменен с "основного" viewcontroller и должен быть "распределен" по объектам UILabel, которые живут в UIView в UITableviewcell внутри UITableView внутри UINavigationController внутри UISplitviewController и так далее...

Если я создаю это свойство на всех уровнях контроллера и иерархии представления и задаю это свойство, когда свойство в родительском элементе установлено, это будет стоить много кода. Apple, похоже, предпочитает этот шаблон для управления managedObjectContext, передавая его дочернему контроллеру по цепочке. Но это кажется излишним. Много кода просто для передачи значения свойства, в то время как с этим ничего не делается. Однако я использую этот шаблон для одновременной установки свойств во всех подпредставлениях представления (путем рекурсивного обхода всех подпредставлений).

Делегирование выглядит так же плохо, за исключением, может быть, не так, если делегат был бы родительским контроллером представления верхнего уровня. Но тогда я передал бы делегата всем дочерним контроллерам представления.

Должен ли я пойти с уведомлениями вместо этого? У меня уже есть контроллер, слушающий (все) изменения в NSUserDefaults через NSUserDefaultsDidChangeNotification. Должен ли этот контроллер отправлять определенное уведомление, когда мои настройки меняются? В таком случае, кто должен это слушать? Должен ли это быть контроллер представления, который ответственен за связанные представления?

1 ответ

После некоторого дополнительного прочтения я нашел совет в книге "Какао-шаблоны проектирования" от Buck / Yacktman, поскольку они утверждают: как правило, используйте уведомления, когда потенциально много объектов могут наблюдать уведомление. Используйте делегатов, когда ровно одному объекту предоставляется возможность влиять или реагировать на изменения по мере их возникновения.

Так что уведомления - это ответ.

Другие вопросы по тегам