【问题标题】:Is a delegate analogous to a mvc controller?委托类似于 mvc 控制器吗?
【发布时间】:2012-01-19 16:41:24
【问题描述】:
【问题讨论】:
标签:
cocoa
model-view-controller
delegates
controller
【解决方案1】:
他们真的处于不同的水平。
使用委托的类是一个类(任何类),其设计目的是让另一个对象提供自定义行为,而不是通过子类化。
例如大多数 Cocoa 应用程序都希望在应用程序启动时做一些自定义的事情(如果他们不这样做会很无聊)。 NSApplication 的设计不是要求每个 Cocoa 应用程序都实现 NSApplication 的自定义子类来覆盖 –applicationWillFinishLaunching:,而是这样设计的它会这样称呼。
这样您就可以使用任何您喜欢的类进行设置,而不必将其设为 NSApplication 的子类。
许多 Cocoa 类都是这样工作的,这意味着您几乎不需要子类化它们来添加自定义行为。在其他一些语言和框架中,您应该添加自定义行为的方式是通过子类化。想要java中的自定义按钮?只需创建一个扩展 JComponent 并实现 MouseListener 的新类,然后覆盖 mouseClicked 等。这不是 Cocoa 的方式。
如您所知,控制器是负责协调模型和视图的对象。
碰巧的是,如果您需要向模型对象或视图对象的实例添加自定义行为 - 例如,您有一个 NSTableView 对象,并且希望在选择一行时添加自定义行为 - 您可能已经有一个自定义的 Controller 对象,这通常是放置代码的最佳位置。只需设置 TableView 的.delegate = 控制器。我们可以看到heretableView 有一个委托方法- tableViewSelectionDidChange: 你不必创建 NSTableView 的子类。
我不认为这意味着代表和控制器是一回事。
【解决方案2】:
委托是运行以捕获事件的后台进程。当您从我们友好的 MVC 软件工程动态中认出它们时,它们就是控制器。事件可能是按钮推动屏幕触摸摇动等......代表是 Cocoa 用来区分的词,正如您如何指导的作者所说的那样,它使它们“可互换”。希望这会有所帮助