gpt4 book ai didi

cocoa - delegate 类似于 mvc Controller 吗?

转载 作者:行者123 更新时间:2023-12-03 16:17:14 25 4
gpt4 key购买 nike

我看到这篇文章:

http://www.cimgf.com/2008/10/01/cocoa-touch-tutorial-iphone-application-example/

“委托(delegate)== Controller 委托(delegate)和 Controller 这两个词可以作为同义词使用......”

我不确定他在说什么,但我对 mvc 的理解比对编程中的委托(delegate)更好。

两者相似吗?

最佳答案

他们确实处于不同的水平。

使用委托(delegate)的类是一个类(任何类),其设计目的是让另一个对象可以提供自定义行为,而不是通过子类化来提供。

例如大多数 Cocoa 应用程序都希望在应用程序启动时执行一些自定义操作(如果不这样做,那会很无聊)。 NSApplication 不是要求每个 Cocoa 应用程序实现 NSApplication 的自定义子类只是为了覆盖 –applicationWillFinishLaunching:,而是设计为如果您设置它将 delegate 属性委托(delegate)给有效对象,并且该对象有一个 –applicationWillFinishLaunching: 方法,它将调用该方法。

这样你就可以使用任何你喜欢的类来进行设置,而不必将其作为 NSApplication 的子类。

许多 Cocoa 类都是这样工作的,这意味着您几乎不需要对它们进行子类化来添加自定义行为。在其他一些语言和框架中,添加自定义行为的方式是通过子类化。想要用java自定义按钮吗?只需创建一个扩展 JComponent 并实现 MouseListener 的新类,然后覆盖 mouseClicked 等即可。这不是 Cocoa 的方式。

如您所知, Controller 是负责协调模型和 View 的对象。

事实上,如果您需要向模型对象或 View 对象的实例添加自定义行为 - 例如您有一个 NSTableView 对象并且您希望在选择一行时添加自定义行为 - 您可能已经有一个自定义的 Controller 对象,这通常是放置代码的完美位置。只需设置TableView's.delegate=controller即可。我们可以看到here tableView 有一个委托(delegate)方法 - tableViewSelectionDidChange: 您不必创建 NSTableView 的子类。

我不认为这意味着委托(delegate)和 Controller 根本是同一件事。

关于cocoa - delegate 类似于 mvc Controller 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com