将属性更改分发给子视图的最佳设计模式是什么?

时间:2012-12-19 21:51:40

标签: uiviewcontroller nsuserdefaults cocoa-design-patterns

假设我在NSuserdefaults中有一个设置应该影响很多(但不是全部)UIView对象的属性,例如字体大小。 该设置也可以从“主”视图控制器进行更改,并且应该“分布”到UILabel对象,这些对象位于UIT视图中的UIT视图内的UIT视图内的UIT视图中的UIView视图中,位于UISplitviewController内部等等...

如果我在控制器和视图层次结构的所有级别上创建此属性,并在设置父级中的属性时设置该属性,则会花费大量代码。 Apple似乎更喜欢这种模式来管理managedObjectContext,方法是将它交给链中的子控制器。 但这似乎有点矫枉过正。很多代码只是为了传递属性的值,而没有做任何事情。但是,我确实使用此模式一次在视图的所有子视图中设置属性(通过递归遍历所有子视图)。

委托似乎同样糟糕,除非代表是顶级父视图控制器,否则可能不会。但后来我会将代理传递给所有子视图控制器。

我应该使用通知吗?我已经有一个控制器通过NSUserDefaultsDidChangeNotification监听NSUserDefaults中的(所有)更改。当我的设置发生变化时,该控制器是否应该发布特定通知?在那种情况下,谁应该听呢?应该是视图控制器负责所涉及的视图吗?

1 个答案:

答案 0 :(得分:0)

经过多次阅读后,我在Buck / Yacktman的“Cocoa Design Patterns”一书中找到了建议,他们说: 作为一般规则,当可能有许多可能观察通知的对象时使用通知。当一个对象有机会影响或对变化做出反应时,请使用委托。

所以通知就是答案。