MVC模型有不同的變體--Cocoa的蘋果文檔在這裏:http://developer.apple.com/library/mac/documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html#//apple_ref/doc/uid/TP40010810-CH14-SW9。
我從中獲取的主要內容是:視圖不應與模型直接相關。看到這個圖:
![Apple diagram of Cocoa MVC pattern](https://i.stack.imgur.com/ZDKNu.gif)
你提到UITableViewCells
經常具有模式對象的屬性 - 我建議這是錯誤的。這個模式應該如下:
- 的模式處理所有實際的數據存儲和管理的
- 的查看知道數據的類型正在顯示,而不是數據本身。
- 的控制器(UITableViewController中)是「膠水」,從模型中獲取數據,並設置了查看
在實踐中如何工作的呢?
請原諒以下僞代碼中的一些錯誤,因爲我只是直接輸入它,我沒有測試過它,但希望它顯示了一點。
所以,你有一個UITableViewCell
子類,它看起來是這樣的:
@interface PhoneEntryTableViewCell {
@property (weak) IBOutlet UILabel *personName;
@property (weak) IBOutlet UILabel *phoneNumber;
}
的模式看起來是這樣的:
@interface PhoneModel {
@property (strong) NSMutableArray *listOfPeople;
}
而且UITableViewController
實現標準UITableViewDelegate
/UITableViewDataSource
方法,例如:
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Person *person = [myModel personForIndex:indexPath.row];
PhoneEntryTableViewCell *cell = [self dequeueReusableCellWithIdentifier:@"PhoneCell"];
cell.personName.text = [person name];
cell.phoneNumber.text = [person phoneNumber];
return cell;
}
因此,總之,查看不知道實際的數據 - 它只知道它必須顯示一個人的姓名和電話號碼。它不知道後端存儲是什麼 - 它可能是核心數據,文件,下載和解析的JSON等。它不知道任何關於模型 - 例如,它可能存儲其他數據關於該人,也許電話號碼實際上存儲在與名稱不同的模型中。 控制器可以處理所有這些工作。
爲什麼這樣呢?
所以你推出上述應用程序,然後發現你的型號是可怕的慢的 - 你可以將其交換出去完全不同的模型,而不會觸及查看。也許你可以讓其他開發人員或設計人員創建查看 - 他們需要知道的一點是它必須顯示兩位文本。基本上它允許你的代碼乾淨,分區清晰,易於擴展,並且更容易重構。
現在,只要你做這樣的事情在你的UITableViewCell
查看,這一切都消失了:
@property (strong) Person *person;