2011-12-13 22 views

回答

6

他們真的是在不同的層次。

使用一個代表一類是設計成使得自定義行爲一類(任何類)可以由另一個對象,而不是比如說提供,由子類。

例如大多數可可應用程序都希望在應用程序啓動時進行一些自定義操作(如果沒有的話,它們會很無聊)。而不是要求每個可可應用程序實現NSApplication的自定義子類只是爲了覆蓋–applicationWillFinishLaunching:NSApplication被設計爲如果您將它的delegate屬性設置爲有效對象,並且該對象具有–applicationWillFinishLaunching:方法,它將調用該子類。

這樣,你可以用你喜歡你的設置任何類,你不必使它的NSApplication的子類。

很多Cocoa類這樣的工作,這意味着你很少有繼承他們添加自定義行爲。在其他一些語言和框架中,您應該添加自定義行爲的方式是通過子類化。在java中想要一個自定義按鈕?只需創建一個擴展JComponent並實現MouseListener的新Class,然後重寫mouseClicked等。這不是Cocoa的方式。

的控制器,如你所知,是負責協調模型和視圖對象。

碰巧,如果你需要添加自定義行爲模型對象或視圖對象的實例 - 比方說你有一個NSTableView的對象,你想在選擇行添加自定義的行爲 - 你可能已經有了一個自定義的Controller對象,並且這通常是放置代碼的理想場所。只需設置TableView's.delegate =控制器。我們可以看到here說的tableView有一個委託方法- tableViewSelectionDidChange:您不必創建NSTableView的子類。

我不認爲這意味着一個代表和控制器都是一樣的東西都沒有。

1

委託是運行趕上事件的後臺進程。他們是控制器,因爲您從我們友好的MVC軟件工程動態中識別出他們。一個事件可能是一個按鈕,推動屏幕觸摸搖等....代表是Coccoa使用的詞是獨特的,作爲你如何指導的作者,它使他們「可互換」。希望這有助於

相關問題