UIViewController是我们经常使用的类,在iOS的MVC中它的角色通常扮演的是C的角色,即控制器,负责M(model数据层)与V(view是视图层)之间的交互问题。
首先了解一下视图控制器的执行流程:
其中init方法,loadView,viewDidLoad方法只有在第一次运行的时候走而且只走一遍(当然在以后肯定不能这么理解),但是对于初学者来说这样比较好记。
其中loadView方法主要是用来创建视图控制器中的view视图的,在程序第一次显示界面或者第一次调用self.view这个get方法的时候,系统就会询问view是否被创建好,如果没有创建好,则会立刻调用loadView方法来创建视图,而viewDidLoad方法是在loadView创建完视图后立刻运行,也就是说loadView和viewDidLoad方法一般是成对出现的,这个一定要记清楚,而我们在self.view上面创建视图的时候即可以在loadView里面创建button,label,等视图。也可以在viewDidLoad里面创建,这个没有严格的区分,根据个人喜好。
但是要注意一点,loadView方法需要自己重写,系统在创建viewcontroller的时候不会帮我们填充loadView方法。如下:
-(void)loadView{
[super loadView];
}
在重写loadView方法的时候必须写[super loadView]方法,这个方法是让父类帮我们创建self.view的视图,当然你也可以自己手动创建,如下:
-(void)loadView{
self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds] autorelease];
}
以上两种写法都没问题,都是为UIViewController创建一个视图view。
对于另外四个方法:viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear来说,他们的执行次数是不固定的,
在视图将要显示的时候会走viewWillAppear,
在视图已经显示的时候会走viewDidAppear,
在视图将要消失的时候会走viewWillDisappear,
在视图已经消失的时候会走viewDidDisappear。
因此你可以在这里面进行一系列重复性操作,比如登录判断,当登录成功的时候让登录界面消失,并且在详细界面进行判断,如果登录成功则显示详情,登录失败可以弹出警告框,这些都可以在这四个方法里面判断。
记住,系统方法仅仅是告诉你了它什么时候走,而具体走的时候进行什么样的操作是由你自己来进行确定的,也就是说方法里面的代码你业已随意书写,没有任何问题。