您的位置:首页 > 移动开发 > IOS开发

iOS-View视图的生命历程

2016-05-02 16:07 549 查看
-[ViewController
initWithCoder:]
-[ViewController
initWithNibName:Bundle]
:首先从归档文件中加载
UIViewController
对象。即使是纯代码,也会把nil作为参数传给后者。 

-[UIView
awakeFromNib]
:作为第一个方法的助手,方便处理一些额外的设置。 

-[ViewController
loadView]
:创建或加载一个view并把它赋值给UIViewController的view属性 

-[ViewController
viewDidLoad]
:此时整个视图层次(view hierarchy)已经被放到内存中,可以移除一些视图,修改约束,加载数据等 

-[ViewController
viewWillAppear:]
:视图加载完成,并即将显示在屏幕上,还没有设置动画,可以改变当前屏幕方向或状态栏的风格等。 

-[ViewController
viewWillLayoutSubviews]
:即将开始子视图位置布局 

-[ViewController
viewDidLayoutSubviews]
:用于通知视图的位置布局已经完成 

-[ViewController
viewDidAppear:]
:视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改。 

-[ViewController
viewWillDisappear:]
:视图即将消失 

-[ViewController
viewDidDisappear:]
:视图已经消失

如果考虑UIViewController可能在某个时刻释放整个View。那么再次加载视图时显然会从步骤3开始。因为此时的UIViewController对象依然存在。

DemoViewController *demoVC = [[DemoViewController alloc] init];
[self presentViewController:demoVC
animated:YES
completion:^{
NSLog(@"presentViewController");
[self dismissViewControllerAnimated:YES
completion:^{
NSLog(@"dismissViewContro"
@"llerAnimated");
}];
}];


2016-05-02 16:04:15.066 UIViewLifeCycle[1509:685319] initWithNibName

2016-05-02 16:04:15.067 UIViewLifeCycle[1509:685319] init

2016-05-02 16:04:15.068 UIViewLifeCycle[1509:685319] loadView

2016-05-02 16:04:15.068 UIViewLifeCycle[1509:685319] viewDidLoad

2016-05-02 16:04:15.070 UIViewLifeCycle[1509:685319] viewWillAppear

2016-05-02 16:04:15.071 UIViewLifeCycle[1509:685319] viewWillLayoutSubviews

2016-05-02 16:04:15.071 UIViewLifeCycle[1509:685319] viewDidLayoutSubviews

2016-05-02 16:04:15.573 UIViewLifeCycle[1509:685319] viewDidAppear

2016-05-02 16:04:15.573 UIViewLifeCycle[1509:685319] presentViewController

2016-05-02 16:04:15.575 UIViewLifeCycle[1509:685319] viewWillDisappear

2016-05-02 16:04:16.078 UIViewLifeCycle[1509:685319] viewDidDisappear

2016-05-02 16:04:16.078 UIViewLifeCycle[1509:685319] dismissViewControllerAnimated

需要注意的是,[b]initWithNibName方法始终会被调用~[/b]

那么我想到一个问题:我们通常会去提供一些比较完备的初始化方法,写大量重复的代码,现在是不是将一些必须的初始化方法放在[b]initWithNibName方法中,就肯定可以得到执行呢?也就是说,我们无论如何,也应该实现[b]initWithNibName方法?[/b][/b]



[b]Demo下载[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息