iOS 【UIKit-方法- (void)loadView; 的详解】

来源:互联网 发布:论文查重软件免费 编辑:程序博客网 时间:2024/05/19 18:11
一、- (void)loadView;  方法的作用
控制器会调用该方法去创建控制器的View

二、默认做法
① 先去判断当前控制器是不是从StoryBoard当中加载的,如果是,那么它就会从StoryBoard当中加载控制器的View。
② 如果不是从StoryBoard当中加载的, 那么它还会判断是不是从Xib当中创建的控制器。如果是,那么它就会从xib加载控制器的View。
③ 如果也不是从Xib加载的控制器。那么它就会创建一个空的UIView,设为当前控制器的View。

三、什么时候调用
第一次使用控制器的View,在view的get方法中调用。

四、注意事项
① 一旦重写了loadView,表示需要自己创建控制器的View。
② 如果控制器的View还没有赋值,就不能调用控制器View的get方法,会造成死循环。因为控制器View的get方法底层会调用loadView方法。


五、关于各方法调用顺序分析
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    XMGViewController *loginVc = [[XMGViewController alloc] init];

    // 在此处代码,会调用view的get方法(内部会调用loadView方法)
    // 注意,调用loadView是view的get方法内部的事情,所以说是在下面这句设置bgColor的代码执行中调用的。也可以这么理解,这句代码是一系列调用的开始,也是结束。
    loginVc.view.backgroundColor = [UIColor blueColor]; // 蓝色
    
    self.window.rootViewController = loginVc;
    [self.window makeKeyAndVisible];
    
    return YES;
}


控制器的view是懒加载的,懒加载在view的get方法中去执行。在view的get方法中会调用loadView方法和viewDidLoad方法。
- (UIView *)view {
    
    if (_view == nil) {
        [self loadView];
        [self viewDidLoad];
    }
    return _view;
}


- (void)loadView {
    UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor redColor]; // 红色
//    view.frame = self.view.bounds; 这句话是错误的,因为后面的self.view是调用了view的get方法,死循环。
    self.view = view;
    view.frame = self.view.bounds; // 因为self.view已经赋值了。所以这句话放在这里就不会出错
}
注意点:在给loadView方法当中,如果没有给self.view进行赋值,就不要使用self.view。但是一旦赋值了就可以使用了。

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor yellowColor]; // 黄色
}

此处代码显示蓝色。因为蓝色是最后设置上的,覆盖了之前设置的红色和黄色。
1 0
原创粉丝点击