1.mvc和mvvm的由来
iOS中,我们使用的大部分都是[MVC架构](http://www.jianshu.com/p/518cb07679eb)
虽然MVC的层次明确,但是由于功能日益的增加,代码的维护,
更多的代码被写在了Controller中,这样Controller就显得非常臃肿。
为了给Controller瘦身,后来又从MVC衍生出了一种新的架构模式MVVM架构
2.mvvm的概念
Model-数据层
ViewController/View-展示层
ViewModel- 数据模型
3.mvc和mvvm的区别
首先我们简化一下MVC的架构模式图:
![1.png](http://upload-images.jianshu.io/upload_images/2182103-e2e8b9f26354e07e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
mvc.png
在这里,Controller需要做太多得事情,表示逻辑、业务逻辑,所以代码量非常的大。而MVVM:
MVVM模式和MVC模式一样,目的主要分离的英文
(视图)和模型(模型),有以下四大优点
1.低耦合
视图(视图)可以独立于模型变化和修改,一个视图模型可以绑定到不同的“查看”上,当查看变化的时候模型可以不变,当模型变化的时候视图也可以不变。
2 .可重用性
你可以把一些视图逻辑放在一个ViewModel里面,让很多视图重用这段视图逻辑
3.独立开发
开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注在页面设计中,使用Expression Blend可以很容易设计界面并生成xaml代码
4.可测试
界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
4.MVVM的实践
1.model层的代码:
#import <Foundation/Foundation.h>
@interface CustomModel : NSObject
@property (nonatomic,strong)NSString *title;
@end
2.view层代码:(创建一个cell)
<1>CustomTableViewCell.h的代码
#import <UIKit/UIKit.h>
@interface CustomTableViewCell : UITableViewCell
@property (nonatomic,strong)UILabel *titleLabel;
@end
<2>CustomTableViewCell.m的代码
#import "CustomTableViewCell.h"
@implementation CustomTableViewCell
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
_titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 50)];
[self.contentView addSubview:_titleLabel];
_titleLabel.backgroundColor = [UIColor whiteColor];
_titleLabel.font = [UIFont systemFontOfSize:15];
_titleLabel.textAlignment = NSTextAlignmentCenter;
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
3.关键的ViewModel