0

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

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

委托似乎同样糟糕,除非委托是顶级父视图控制器。但随后我会将委托传递给所有子视图控制器。

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

4

1 回答 1

0

在阅读了更多内容后,我在 Buck / Yacktman 的 Cocoa Design Patterns 一书中找到了建议,正如他们所说:作为一般规则,当可能有许多对象可能观察到通知时,请使用通知。当恰好一个对象有机会影响或响应正在发生的变化时,请使用委托。

所以通知就是答案。

于 2012-12-19T22:32:06.517 回答