大家肯定都听过MVC这种架构,首先我们来看下Apple版的MVC
Model-View-Controller
实例
接下来我们用一个简单的例子来说明下,我们新建一个项目,比如是一个新闻类的项目,本地简单的模拟下网络加载数据然后展示到TableView上,我们首先创建一个XXNews的Model
<code>@interface XXNews : NSObject
@property (copy, nonatomic) NSString *title;
@property (copy, nonatomic) NSString *content;
@end/<code>
,接着创建一个XXNewsViewController继承自UITableViewController
<code>@interface XXNewsViewController ()
@property (strong, nonatomic) NSMutableArray *newsData;
//@property (strong, nonatomic) NSMutableArray *shopData;
@end
@implementation XXNewsViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self loadNewsData];
// [self loadShopData];
}
// 本地模拟网络加载
- (void)loadNewsData
{
self.newsData = [NSMutableArray array];
for (int i = 0; i < 20; i++) {
XXNews *news = [[XXNews alloc] init];
news.title = [NSString stringWithFormat:@"news-title-%d", i];
news.content = [NSString stringWithFormat:@"news-content-%d", i];
[self.newsData addObject:news];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.newsData.count;
}
#pragma mark - Table view data source
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewsCell" forIndexPath:indexPath];
XXNews *news = self.NewsData[indexPath.row];
cell.detailTextLabel.text = news.content;
cell.textLabel.text = news.title;
return cell;
}
@end/<code>
我们运行下项目来看看,数据显示出来了
我们来看看MVC三个角色,
Model(News),View(TableView),Controller(XXNewsViewController),那我们来验证下这个MVC跟我们上面说的是否一致
我们看到XXNewsViewController拥有newsData(可以创建,加载这些模型数据),而且XXNewsViewController也拥有View(TableView),然后,View(TableView)是不知道这个Model(News)的存在的,Model(News)也不知道View(TableView)的存在,
那View是如何显示Model的数据的呢?全靠Controller这个桥梁把Model的数据取出来,然后赋值给View对应的控件上,所以跟我们上面说的是一致的,这个呢就是Apple版的MVC了,接下来我们可以总结下这个架构的优缺点
优缺点
优点:View和Model可重复利用,(这也解释了TableView为啥这么万能:不关心Model,比如我们显示个商品的列表,只需换下Model,然后赋值对应的控件就行了,而不用换TableView)大家如果自定义View的时候想做的复用性很强的话,可以操考下TableView的设计缺点:Controller的代码过于臃肿总结一下
架构这种东西呢,不是我三言两语能说清楚的,我在这里写的也只是些概念、Demo,还是需要大家多思考,多练习,不断的积累项目经验,才能悟出来更高的更深层次的东西