一.UIViewController基础概念
iOS的整个UI开发的核心思想是基于MVC架构进行设计,UIViewController就是作为视图控制器的存在。
- Controller作为整个UI视图的控制器,对于用户的输入做出逻辑处理,例如用户点击某个按钮应该执行什么操作等。
- View角色只负责显示视图。
- Model也就是我们的数据模型,例如从Core data中加载的实体类等等。
二.UIViewController的生命周期
如果使用 StoryBoard 来创建 ViewController,我们不需要显式地去初始化,Storyboard 会自动使用initWithCoder:
进行初始化。如果不使用 StoryBoard,我们可以使用init:
函数进行初始化,init:
函数在实现过程中还会调用initWithNibName:bundle:
。
初始化完成后,VC 的生命周期会经过下面几个函数:
- (void)loadView
- (void)viewDidLoad
- (void)viewWillAppear
- (void)viewWillLayoutSubviews
- (void)viewDidLayoutSubviews
- (void)viewDidAppear
- (void)viewWillDisappear
- (void)viewDidDisappear
在经过viewDidLoad之后UIViewController的状态是对称对应的。
三.UIViewController的组织方式
在iOS中根据UIViewController的组织方式大致可分为四种类型:
- UINavigationController:以push/pop方式切换(替换),它活动的UIViewController只有当前被push出来的那一个,被替换的控制器将会销毁,是一种链式的组织方式。
- ModalViewController:以present方式切换(覆盖),所有在present链上的控制器不会被销毁,是一种链式的组织方式。
- UITabBarController:以标签页的方式切换(并行),加载过的子控制器会一直存在除非内存不足,是一种树形的组织方式。
- ChildViewController:以添加的方式加入控制器树中(并行),由父控制器直接来控制它的子控制器,是一种树形的组织方式。
四.编写UIViewController的基本代码规范
@interface ViewController ()
@property(nonatomic,strong)UIView * topView;
@end
@implementation ViewController
#pragma mark - LifeCycle Menthod
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark - Delegate Menthod
#pragma mark - Event response
#pragma mark - Private Menthods
#pragma mark - getter && setter
-(UIView*)topView{
if (!_topView) {
_topView = [[UIView alloc]init];
}
return _topView;
}
@end
- 不要在viewDidLoad里面初始化view然后再addSubView,在属性的getter中完成初始化。
- 在viewDidload里面只做addSubView的事情,建议把constraints写在viewDidLoad里面,可以写一个layoutSubviewConstraints这样的方法,然后在viewDidLoad里面调用它。
- 最后在viewDidAppear里面做Notification的监听之类的事情,属性的初始化,则交给getter去做。