美文网首页
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