美文网首页
loadView的加载时机

loadView的加载时机

作者: guoguojianshu | 来源:发表于2019-03-22 16:56 被阅读0次

访问视图控制器的view时候,如何view为nil,或者还没有加载完成就会调用loadView方法来创建view

没有重写loadView方法时候,系统默认做的事情

1.如果初始化控制器的时候,有制定xib文件,就会根据xib文件的名字,进行加载xib文件

    [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

2.如果在创建的时候,没有显示的传入xib的名字,那么系统就会找跟视图控制器名字一样的xib文件进行加载

    [[ViewController alloc]init];

3.如果前面两步,都没有找到,那么系统就会自动创建一个空的view,来作为视图控制器的view

重写了loadView方法时候

1.如果在loadView方法中没有给view进行赋值,那么在- (void)viewDidLoad方法中使用view的时候,因为view为nil,所以就会再次来到loadView方法中,这样就会造成了死循环,直到程序奔溃。

-(void)loadView{
    
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor redColor];
}

2.还有一种情况导致死循环,在loadView方法中,在没有把自定义的view赋值给视图控制器的view时候,就使用视图控制器的view,这个时候视图控制器的view的值还是空的,只要视图控制器的view的值为空,就会来到loadView方法中,造成自身死循环,直到程序奔溃。

-(void)loadView{
    UIView * view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];
//这个解决自身死循环的方法是使用view.backgroundColor就没问题了,
    self.view.backgroundColor = [UIColor yellowColor];
    self.view = view;
}

正确的使用

如果重写视图控制器的view,就需要重写loadView方法,在使用视图控制器的view时候,必须确保必选有值,也就是必须控制器的view进行先赋值,再操作,不能使用[super loadView];方法,因为会重复上面系统的三个找xib文件的步骤。

-(void)loadView{
    UIView * view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.view = view;
    self.view.backgroundColor = [UIColor yellowColor];
}

相关文章

网友评论

      本文标题:loadView的加载时机

      本文链接:https://www.haomeiwen.com/subject/tnlrvqtx.html