iOS-View视图的生命历程

  1. -[ViewController initWithCoder:]-[ViewController initWithNibName:Bundle]:首先从归档文件中加载UIViewController对象。即使是纯代码,也会把nil作为参数传给后者。 
  2. -[UIView awakeFromNib]:作为第一个方法的助手,方便处理一些额外的设置。 
  3. -[ViewController loadView]:创建或加载一个view并把它赋值给UIViewController的view属性 
  4. -[ViewController viewDidLoad]:此时整个视图层次(view hierarchy)已经被放到内存中,可以移除一些视图,修改约束,加载数据等 
  5. -[ViewController viewWillAppear:]:视图加载完成,并即将显示在屏幕上,还没有设置动画,可以改变当前屏幕方向或状态栏的风格等。 
  6. -[ViewController viewWillLayoutSubviews]:即将开始子视图位置布局 
  7. -[ViewController viewDidLayoutSubviews]:用于通知视图的位置布局已经完成 
  8. -[ViewController viewDidAppear:]:视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改。 
  9. -[ViewController viewWillDisappear:]:视图即将消失 
  10. -[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


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

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


Demo下载



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值