首页 > 代码库 > UIViewController启动过程

UIViewController启动过程

初始化:

第一种初始化方法:假如MainUIViewController类继承了UIViewController类,mainUIViewController是MainUIViewController的实例对象,当调用Init方法的时候【MainUIViewController *mainUIViewController = [[MainUIViewController alloc] init]】,[super init]父类的init方法会自动调用【- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil】方法,如果有个和MainUIViewController同名的xib文件,xib文件所属权为MainUIViewController,Custom Class设置为MainUIViewController,并且Outlets中的view和视图中的view相连接。那么[initWithNibName: bundle:]方法会加载此UIView。

第二种初始化方法:假如自定义了一个rootView.xib作为UIViewController的view,那么调用【MainUIViewController *mainUIViewController = [[MainUIViewController alloc] initWithNibName:@"rootView" bundle:nil]】此方法初始化自己的视图,同样rootView.xib文件也要进行第一种方法一样的设置。

第三步初始化方法:假如没有.xib文件,以代码的方式创建UIViewController中的视图,那么在MainUIViewController.m文件中重写父类的- (void)loadView方法,两种重写方法:1.[super loadView]父类方法是创建一个empty View;2.自己创建一个UIView对象,赋值给self.view。如:

- (void)loadView{
  UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];  self.view = view;  [view release];
}

  在调用完loadView时,视图就对用户可见了,会自动调用viewDidLoad方法,一般情况下,数据对象是通过配置UIViewController的属性来提供的,如果UIViewController需要一些额外的属性,那么需要重写此函数来提供数据。

 

代码执行顺序:

1、alloc                               创建对象,分配空间
2、init (initWithNibName)      初始化对象,初始化数据
3、loadView                        载入视图
4、viewDidLoad                   载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear               视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear               视图已在屏幕上渲染完成

注意:当用get方法访问UIViewController中的View时(如:self.view),如果此时UIViewcontroller中的view为空nil;系统会自动调用- (void) loadView函数,每次访问都会进入此函数。在viewDidLoad方法中会访问ViewController对象中的view属性,所以在loadView方法中必须对其赋值,否则又会进入loadView方法,造成死循环!