1、 控制器创建
当我们使用storyboard加载controller时系统会调用此方法创建控制器
// 控制器初始化方法
- (instancetype)initWithCoder:(NSCoder *)aDecoder
当我们使用代码创建或者使用xib创建时会走下面这个创建方法
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
当你使用 [[UIviewController alloc] init] 创建控制器时会调用 inittWithNibName: nil bundle:nil 这时候系统会做以下操作,首先检查有没有和控制器同名的xib,有的话加载视图,没有的话创建一个空的view赋值给 self.view。如果你传入的nib不为空会去找你对应nibname的xib 加载。
2、加载视图
loadview
- (void)loadView {
[super loadView];
}
loadView方法 创建viewController 的 view, 如果子类重写了loadVie 要调用 [super loadView], 这样能保证控制器会有View,因为如果你传入的nibName无效 [super loadView]也会创建一个空的view,如果你不调用super 直接重写loadView 则一定要保证在loadView中创建view : self.view = 创建view; 如果loadView 得不到创建的view 控制器就会报错。
viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
}
view的数据加载完成时调用,这时候viewController的 self.view 已经有值了,可以在这个方法里面做一些附加操作,添加动态的subviews。viewDidLoad会在view加载完成调用一次。
:如果重写了loadeView但是没有创建view导致loadView失败,则会重复的调用loadView 和 viewDidLoad。
viewWillUnload、 viewDidUnload
- (void)viewWillUnload {
[super viewWillUnload];
}
- (void)viewDidUnload {
[super viewDidUnload];
}
这两个方法两个在iOS6已经废弃。原本是因为在系统报内存警告时会在调用 viewWillUnload 释放view后调用 viewDidUnload,然后再需要显示的时候会重新调用viewDidLoad, 所以可以在viewDidUnload 释放我们创建的view。废除的原因 请看这篇博客
再见,viewDidUnload方法 这篇博客做了废弃方法的解释。
viewWillAppear: & viewDidAppear:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
viewWillAppear: 一般在view添加到superView 之前,切换界面之前调用,在这里可以做一些显示前的动画比如键盘弹起,一些特殊的过程动画,比如处理navigationBar的颜色。
viewDidAppear: view显示后,切换动画后,如果需要做出处理可以在这里实现。
viewWillLayoutSubviews & viewWillLayoutSubviews
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
}
苹果对这两个方法解释很简单,viewWillLayoutSubviews就是控制器的view的layoutSubviews执行之前执行,viewDidLayoutSubviews是在控制器view的layoutSubviews执行之后执行,可以做一下需要的操作。layoutSubviews执行的时机这里不在赘述,这两个方法会在 viewWillAppear 和 viewDidAppear 之间执行
viewWillDisappear: & viewDidDisappear
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
}
viewWillDisappear:view 从其他view移除之前调用,在返回的切换动画之前执行,移除后同样也是动画结束后会调用viewWillDisappear
3、控制器释放
- (void)dealloc {
}
在控制器即将释放时调用,控制器生命周期结束可以在这个方法里面释放我们自己创建的资源。
网友评论