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;