zoukankan      html  css  js  c++  java
  • IOS 控制器View的创建方式(方式的优先级 、view的延迟加载)

     

    MJViewController的view的创建 的方式优先级

    控制器view的延迟加载 

    ● 控制器的view是延迟加载的:用到时再加载

    ● 可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载

    ● 控制器的view加载完毕就会调用viewDidLoad方法 

    /*
     1.没有同名xib情况下
     2.通过 storyboard 创建
     3.有指定xib情况下创建
     4.有同名xib情况
     5.有同名去掉controll的情况
     6.loadveiw
     */
    @implementation NJAppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // 1.创建UIWindow
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.backgroundColor = [UIColor whiteColor];
        
        
        // 2.创建控制器
         NJViewController *vc = [[NJViewController alloc] init];
        
        // 其实是两部操作, 首先调用loadview方法, 创建控制器的veiw,然后再设置控制器的view的颜色为紫色, 也就是说后一次的颜色覆盖掉了前一次的颜色
        vc.view.backgroundColor = [UIColor purpleColor];
        
        // 3.设置控制器为window的根控制器
        self.window.rootViewController = vc;
        
        // 4.显示window(在这一行才用到了控制器的veiw)
        [self.window makeKeyAndVisible];
        
        return YES;
    }
    
    - (void) test
    {
        /*
         // 1.第一种方式:没有xib和storyboard
         // (如果没有xib和storyboard, 会自动创建一个空白的view做为控制器的veiw)
         NJViewController *vc = [[NJViewController alloc] init];
         */
        
        /*
         //2.通过 storyboard 创建
         // 如果通过storyboard创建, 会创建箭头指向view做为控制器的veiw
         
         // 如果重写了控制器的loadview方法, 就不会创建storyboard中描述的view作为控制器的view, 而是创建一个空白的veiw做为控制器的veiw
         UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
         NJViewController *vc = [storyboard instantiateInitialViewController];
         */
        
        /*
         // 3.有指定xib情况下创建
         // 如果通过xib, 会创建xib中描述的veiw做为控制器的veiw
         NJViewController *vc = [[NJViewController alloc] initWithNibName:@"One" bundle:nil];
         */
        
        /*
         //  4.有同名xib情况
         // 如果有同名的xib, 会自动找到同名xib中描述的view做为控制器的veiw
         NJViewController *vc = [[NJViewController alloc] init];
         */
        
        /*
         // 5.有同名去掉Controller的 xib情况
         // 如果有有同名去掉Controller的xib, 会自动找到该xib的view做为控制器的view
         NJViewController *vc = [[NJViewController alloc] init];
         */
        
        // 6.重写控制器的loadveiw方法
        // 如果重写了控制器的loadview方法, 就不会去加载创建同名去掉controller的xib和同名的xib, 而是创建一个空白的veiw做为控制器的veiw
        NJViewController *vc = [[NJViewController alloc] init];
    }
    // 当控制器需要显示控制器的view的时候就会调用loadView
    // 可以在loadView方法中创建view给控制器
    // 该方法一般用于自定义控制器的view
    - (void)loadView
    {
        // 什么时候调用loadveiw就代表什么时候加载控制器的veiw
        NSLog(@"loadView");
        
        self.view = [[UIView alloc] init];
        self.view.backgroundColor = [UIColor greenColor];
    }
  • 相关阅读:
    springboot-pom文件报错问题
    php-session永不过期
    linux mysql 配置
    jmeter
    性能指标
    ab
    php--xdebug调试
    logstash6-mysql同步数据到es
    php--宝塔环境
    linux-centos7安装错误解决
  • 原文地址:https://www.cnblogs.com/liuwj/p/6520093.html
Copyright © 2011-2022 走看看