UIViewController的生命周期实质上是指根视图view从无到有的过程

1.首先新建一个工程:不从mainstoryBoard加载

(删除入口)

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

在AppDelegate.m -->

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中

创建窗口

在31行打上断点

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

(图一)

注意此时VC.view = nil;

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

2.跳到下一个断点处(在ViewController.m 的 viewDidLoad方法中)

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

(图二)

此时的self.view有值了

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

试图控制器的加载过程   就是说的view从无到有的过程

ViewController.m中

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

(图三)

图二 中 ViewController *VC = [[ViewController alloc]init];执行后会跳到图三(打上断点)  ---->然后跳回到 图二 中的31行

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

ViewController调用alloc init方法时会 自动调用到

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  方法中

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

重新运行到这里此时的view 还是nil                                                             |

|

还是在ViewController.m中 loadView被调用(注意:永远不要自己主动去调,系统自己调用) 调用条件:1.view 被访问  2.此时的view = nil  (如果AppDelegate中self.window.rootViewController被注释掉 就不会调用initWithNibName方法了)

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

执行过了29行view就会有值了                                                                   |

然后再执行viewDidLoad方法                                                                  \|/

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

UIViewController的生命周期(根视图view从无到有的过程)-LMLPHP

04-19 15:57
查看更多