生命周期
Controller视图控制器在iOS程序中非常的常见, 每个controller在创建视图的时候,会调用loadView方法, 该方法的作用是给controll加载一个视图,并且该视图是透明的
viewController一般可以分为两类:
展示类controller: 用于显示UI界面,可以用来继承.常用的只有UIViewController和UITableViewController可以被继承
容器类controller: UINavigationController 和UITabBarController.两者都具有Controllers的属性. UINavigationController 是一种栈式的结构,push和pop. 一般控制器之间具有依赖关系. UITabBarController中的控制器是数组的排列方式.
// 初始化控制器
- (instancetype)init {
self = [super init];
return self;
}
// 在调用loadview之前,当前控制器是没有view的
- (void)loadView {
[super loadView];
//加载控制器自带的view视图,此方法一般情况下不需要重写
}
- (void)viewDidLoad {
[super viewDidLoad];
// 当控制器自带视图加载完毕后,调用此方法
// 此时view即将限时,此时的superview一般是nil
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// 视图即将显示
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// view已经显示
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// view 即将消失,此时还没有调用removeFromSuperView
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// 此时view已经从superview中移除了
}
- (void)viewDidUnload {
[super viewDidUnload];
// view从内存中消失
}
// 控制器释放,此方法由系统内部实现,在ARC中程序员不能自行释放
- (void)dealloc {
[super dealloc];
}
1, 如果我们不重写loadView,系统会默认实现loadView方法给controller自动创建一个透明视图
2, 如果我们重写了loadView ,就必须给controller设置视图,否则会死循环(也可在viewDidload中设置这个view,只要设置了,程序就不会出现死循环).在viewDidLoad方法中,如果检测不到视图,就会不断调用loadView, 这个时候就会出现死循环
MVC
MVC 是一个框架级的设计模式,其核心为controller控制器层
- M model 数据层 负责数据的映射,提供数据
- V view 视图层 负责数据的展示,UI渲染等
- C controller 控制器层 负责处理用户操作,model层和view层通讯,屏幕旋转,内存警告等