viewController生命周期:
-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