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

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

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

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

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


person Bjinse    schedule 19.12.2012    source источник


Ответы (1)


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

Итак, уведомления — это ответ.

person Bjinse    schedule 19.12.2012