当前位置:编程学习 > wap >>

通俗易懂的讲解iphone视图控制器的生命周期

IOS 视图控制器的生命周期非常非常重要,所以我有必要写个文章来和大家一起探讨问题。

今天在学习视图控制器的生命周期,也看了一下网上的一些资料,但总觉得不是那么好理解,首先我们来看一张图:

 \

先粗略讲一下:

 \

看这段源码就可以理解上面的那句话.这句话的意思就是说,如果view不存在,就会触发loadView方法

 \

这话的意思是说如果不用nib方式,就可以在子类中自定义视图树,但不要直接去调用loadview方法。

再下一步问,是否是自定义方法Custom Method?(也可以看成是自定义视图)如果是,就调用自定义方法,如果不是,就要再进一步询问,是否是StoryBoard 如果是就从StoryBoard加载(调用load From storyBoard),如果不是就直接创建一个empty View.

 

 

\

上面这段代码只需要关心第一句就可以了,它的意思说,调用viewDidLoad方法后就view视图就加载完成了。

从上面这张图中我们可以看到调用viewDidLoad方法前View一直是nil,调用viewDidLoad方法后View才有值了。

总之一句话,调用了viewDidLoad方法后就创建了View这句话就这么简单。

比较难理解的是loadview方法,这里面非常关键。这里需要重点说明。

如果你不重写loadview方法,系统就会调用其父类的方法,这个不难理解.

但如果你重写了这个方法,打比方,你不调用[super loadview] 应用程序界面就是黑的,因为你的view一直没有被创建。

 


//
//  MainViewController.m
//  Controller
//
//  Created by king on 13-7-7.
//

#import "MainViewController.h"

@inte易做图ce MainViewController ()

@end

@implementation MainViewController

-(id)init{
    self = [super init];
    if(self){
        //这里不要调用self.view
    }
    return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        //这里不要调用self.view
    }
    return self;
}

-(void)loadView{
    //这里你要么调用[super loadview]方法创建view
    // 要么你自己自定义view ,给view赋值
   // [super loadView];
   
    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
                    view.backgroundColor = [UIColor yellowColor];
                    self.view = view;
                    [view release];
   NSLog(@"viiew %@",self.view);
}

- (void)viewDidLoad
{
    [super viewDidLoad];
   // NSLog(@"View %@",self.view);这里调用self.view方法要注意的事项,调用self.view方法的时候请确保view不是nil否则程序会引起错乱。
   
   
   
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

补充:移动开发 , IOS ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,