现在的位置: 首页 > 综合 > 正文

UIViewController加载过程

2013年12月13日 ⁄ 综合 ⁄ 共 1689字 ⁄ 字号 评论关闭

UIViewController是视图和数据的桥梁,UIViewController是所有controller的基类,ios内置了很多试图控制器,如导航控制器,tableViewController等。

视图控制本身包含一个视图,是view。UIScreen是连接物理屏幕的标示,UIWindow是为UIScreen提供了一个画布。

加载过程分为以下几步:

第一、从xib文件中创建:- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

sample:

self.viewController = [[[AndyViewControlleralloc]initWithNibName:@"AndyViewController"bundle:nil]autorelease];

说明:

如果对象是UIViewController的子类,那么必定会调用该函数,init函数在初始化过程中也会调用此函数,如果文件中没有xib,那么初始化调用完此函数后,view仍然回空,这个时候调用view的set方法发现,view为空,就会自动调用loadView方法初始化一个emptyView,如果子类重写了该方法,那么就会调用子类的该方法,但是子类重写时必须self.view
复制,否则view将为空,接下来调用viewDidLoad方法。

第二、loadView方法

当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
如果手工维护views,必须重载重写该方法
如果使用IB维护views,必须不能重载重写该方法
loadView和IB构建view
作用:在需要用程序自定义view时重新,其他情况可以不用考虑

第三、(void)viewDidLoad

在调用完loadView方法后,调用此方法,重写该方法可以进一步定制view,

一般情况下,数据对象是通过配置view controller的属性来提供的,view controller需要的一些额外的数据应该通过重写viewDidLoad函数来提供。

但是如果此时view没有创建好,使用self.view时会重新调用loadView方法,这样导致死循环。

实例代码如下:

-(void)loadView
{
    NSLog(@"loadView");
//    UIView *view=[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
//    view.backgroundColor=[UIColor greenColor];
//    self.view=view;
//    [view release];
    
    //添加子视图
}
- (void)viewDidLoad
{
    [super viewDidLoad];
     UIView *view=[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
        view.backgroundColor=[UIColor greenColor];
    [self.view addSubview:view];
      [view release];

    
    NSLog(@"view Did Load");
    //注意上面的操作会判断view是否为空,如果view为空,就会调用loadview方法
	// Do any additional setup after loading the view.
}


第四、- (void)viewWillAppear:(BOOL)animated;    // Called when the view is about to made visible. Default does nothing
第五、- (void)viewDidAppear:(BOOL)animated;     // Called when the view has been fully transitioned onto the screen. Default does nothing

抱歉!评论已关闭.