【发布时间】:2012-01-18 15:27:47
【问题描述】:
我是 Mac 编程新手,我正在开发基于文档的应用程序。
我的NSDocument 子类创建了一个NSWindowController 子类。这个窗口控制器也创建了两个 NSViewController 子类。
有时,NSViewController 的其中一个视图的更改需要通知NSDocument 和/或主模型类。此外,需要将模型的更改通知给每个/某些视图。
我的问题是:没有(或最小)耦合的最佳方法是什么?我知道有几种选择,但我不确定哪一种最适合我的应用程序,因为我不是编程新手,而是 Cocoa 新手,尤其是 NSDocument:
KVO。 看起来不错且易于实现,但我不喜欢不明确通知观察者有关更改的想法(AFAIK,
self.someProperty = newValue会自动执行通知观察者),并且不喜欢您必须注册可能会及时更改的属性名称的事实。通知。我知道它们是什么,并且我已经将它们用于 iOS。但我在某处读到,它们不能保证立即发送给观察者。这是真的吗?如果不是,您认为它们是基于文档的应用程序的好方法吗?
代表。是的,在正常情况下(或我通常看到的情况),一个班级有一个代表。但是创建一个代表数组也可以(刚刚测试过)。我在这里看到的问题是,每次我需要通知代表时,我都必须遍历它们,确保它们响应一个方法,然后调用该方法。
我还缺少其他选择吗?
【问题讨论】:
-
通知立即发送给观察者。
标签: objective-c macos cocoa cocoa-design-patterns