viewController生命周期和view加载顺序

viewController生命周期:


viewController生命周期和view加载顺序_第1张图片
20130614155652265.jpeg

-ps:图片源自网络

view的加载顺序知识点:

1,控制器的view是延迟加载的,用到时再加载

2,可用isViewLoaded方法来判断一个控制器的view是否已经被加载

3,控制器的view加载后就会调用viewDidload

-注意:如果没有指定nibName,而且没有重写控制器的loadVIew,控制器的类名必须以Controller结尾,才会去找XXXview.xib,接着找XXXController.xib

调用顺序
loadView->viewDidLoad->viewWillAppear->viewDidAppear->viewWillDisappear->viewDidDisappear ->didReceiveMemeoryWarining->viewWillUnload->viewDidUnload
1、有loadView方法,就加载loadView里的视图view,这个方法就是用来自定义视图的。PS:在这个方法中不得使用view的getter方法,但是可以使用setter方法,因为view也是用到时才加载的,所以用getter会重新调用这个loadView造成死循环。

- (void)loadView
{
   //[super loadView];自定义view时不要调用这个方法
   UIView *myView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    myView.backgroundColor = [UIColor purpleColor];
    //myView.frame = self.view.frame;不可这样写
    self.view = vcView;
}

2、如果子类没有实现loadView,在创建控制器时,分两种创建方法:

  • 2.1、如果是从storyboard加载控制器的,则按storyboard的描述创建控制器的view。
  • 2.2 如果是从xib中加载控制器,使用initWithNibName来创建控制器,系统根据xib名字去寻找相应的xib来创建控制器view(如果用init创建控制器,它也会在底部先调用initWithNibName方法的)。

3、如果指定的xib不存在则crash,若没有指定xib,即加载xib为nil,此时的顺序如下:

  • 3.1、若指定了xib的名称,则加载相应xib里面的view。
  • 3.2、若没有指定xib的名称,则加载与控制器名称前缀相同的xib视图,如控制器名称是DyViewController,那么加载DyView.xib文件里的view视图。
  • 3.3、若没有叫DyView的xib文件,则加载与控制器同名的xib里的视图,即加载DyViewController.xib里的view。
  • 3.4、若都没有,则加载个空白view,它的背景色是clearColor,几乎透明的,可以看到view下面的控件,但它又不是透明的,如果加一个控件在window上是无法点击的。

alpha:0-0.01,完全透明,可以穿透
alpha:0.01-1.0,不能穿透

推荐一篇比较介绍的比较完整的:
链接http://www.jianshu.com/p/23a83706d773

你可能感兴趣的:(viewController生命周期和view加载顺序)