objective-c – 避免在基于文档的Cocoa应用程序中进行耦合?

objective-c – 避免在基于文档的Cocoa应用程序中进行耦合?,第1张

概述我是Mac编程的新手,我正在研究基于文档应用程序. 我的NSDocument子类创建了一个NSWindowController子类.该窗口控制器也创建了两个NSViewController子类. 有时,NSViewController的其中一个视图的更改需要通知NSDocument和/或主模型类.此外,需要将模型的更改通知给每个/一些视图. 我的问题是:什么是最好的方法,以便没有(或最小)耦合 我是Mac编程的新手,我正在研究基于文档的应用程序.

我的NSdocument子类创建了一个NSWindowController子类.该窗口控制器也创建了两个NSVIEwController子类.

有时,NSVIEwController的其中一个视图的更改需要通知NSdocument和/或主模型类.此外,需要将模型的更改通知给每个/一些视图.

我的问题是:什么是最好的方法,以便没有(或最小)耦合?我知道有几种选择,但我不确定哪种选择最适合我的应用程序,因为我不是编程的新手,而是Cocoa,尤其是NSdocument:

> KVO.看起来不错,易于实现,但我不喜欢没有明确通知观察者有关更改的想法(AFAIK,self.someProperty = newValue会自动通知观察者),并且不喜欢你的事实必须注册可能会及时更改的财产名称.
>通知.我知道它们是什么,我已经将它们用于iOS.但我在某处读过,他们不能保证立即发送给观察员.这是真的吗?如果没有,您认为它们是基于文档的应用程序的好方法吗?
>代表们.是的,在正常情况下(或我经常看到的),一个班级有一名代表.但是创建一个代理数组也是可行的(只是测试它).我在这里看到的问题是每次我需要通知代理时我必须遍历它们,确保它们响应方法,并调用该方法.

我还缺少其他任何替代方案吗?

解决方法 控制器类的KVO是在模型和视图之间进行耦合的最常用方法.实际上,Cocoa Bindings主要用于消除控制器层中的代码,它们基于KVO.确实,KVO / KVC依赖于属性名称,如果这些更改,您将不得不更改连接视图的绑定或KVO设置.但是,通常不可能使您的视图完全不知道底层模型细节,所以我不认为这是一个问题.

我的建议是尽可能使用Cocoa Binding,因为它们消除了大量的胶水代码.在无法使用它们的地方,您的控制器(MVC中的中间层)应使用KVO来观察模型更改并更新相应的视图.视图中的更改可以通过属性访问器和/或控制器的KVC传递回模型.

总结

以上是内存溢出为你收集整理的objective-c – 避免在基于文档的Cocoa应用程序中进行耦合?全部内容,希望文章能够帮你解决objective-c – 避免在基于文档的Cocoa应用程序中进行耦合?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1072295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存