前言
viewController的代码应该差不多这样:
要点如下:
所有的属性都使用getter和setter
不要在viewDidLoad里面初始化view然后addSubview. 在viewDidLoad里面只做addSubview的事情, 属性的初始化, 则交给getter去做.
比如这样:
#pragma mark - life cycle
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.firstTableView];
[self.view addSubview:self.secondTableView];
[self.view addSubview:self.firstFilterLabel];
[self.view addSubview:self.secondFilterLabel];
[self.view addSubview:self.cleanButton];
[self.view addSubview:self.originImageView];
[self.view addSubview:self.processedImageView];
[self.view addSubview:self.activityIndicator];
[self.view addSubview:self.takeImageButton];
[self layoutPageSubviews];
}
- (void) layoutPageSubviews
{
CGFloat width = (self.view.width - 30) / 2.0f;
self.originImageView.size = CGSizeMake(width, width);
[self.originImageView topInContainer:70 shouldResize:NO];
[self.originImageView leftInContainer:10 shouldResize:NO];
self.processedImageView.size = CGSizeMake(width, width);
[self.processedImageView right:10 FromView:self.originImageView];
[self.processedImageView topEqualToView:self.originImageView];
CGFloat labelWidth = self.view.width - 100;
self.firstFilterLabel.size = CGSizeMake(labelWidth, 20);
[self.firstFilterLabel leftInContainer:10 shouldResize:NO];
[self.firstFilterLabel top:10 FromView:self.originImageView];
... ...
}
getter和setter全部都放在最后
一个ViewController很有可能会有非常多的view, 如果getter和setter写在前面, 就会把主要逻辑扯到后面去, 这样不方面其他人查看. 写代码的时候按照顺序来分配代码块的位置, 先是life cycle
, 然后是Delegate方法实现
, 然后是event response
, 最后才是getter 和setter
.
每一个delegate都把对应的protocol名字带上, delegate写在一个区域
比如UITableViewDelegate的方法集就写上#pragma mark - UITableViewDelegate
. 方便查找
event response专门开一个代码区域
所有的响应事件的处理都放在这个区域里面
关于private methods, 正常情况下ViewController里面不应该写
不是delegate方法的, 不是event response方法的, 不是life cycle方法的, 就是private method了. 正常情况下viewController里面一般是不会存在private methods的, 写成一个category或者做成一个模块. 这样一开始独立出来, 方便以后代码的复用.
在iOS开发中, MVC划分的正确姿势:
M应该做的事情:
1.给ViewController提供数据
2.给ViewController存储数据提供接口
3.提供经过抽象的业务基本组件, 供Controller调度
C应该做的事情:
1.管理ViewController的生命周期
2.负责生成所有的View实例, 并放入ViewContainer中
3.监听来自View与业务有关的时间, 通过与Model的合作, 来完成对应事件的业务
V应该做的事情:
1.相应与业务无关的事件, 并因此引发动画效果, 点击反馈等
2.界面元素表达