本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末
如果觉得本文内容过长,请前往本人 “简书”

加载优先顺序:
  • 1、用系统的loadView方法创建控制器的视图
  • 2、如果指定加载某个storyboard文件做控制器的视图,就会加载storyboard里面的描述去创建view
  • 3、如果指定读取某个xib文件做控制器的视图,就根据指定的xib文件去加载创建
  • 4、如果有xib文件名和控制器的类名前缀(也就是去掉controller)的名字一样的 xib文件,就会用这个xib文件来创建控件器的视图 【例:控件器的名为 TDViewController, xib文件名为 TDView.xib】
  • 5、找和控制器同名的xib文件去创建
  • 6、如果以上都没有就创建一个空的控件器的视图;
控制器view的延迟加载:
  • 控制器的view是延迟加载(懒加载)的:用到时再加载
  • 控制器的view加载完毕(先加载loadView),再去 调用viewDidLoad方法
  • 用isViewLoaded方法判断UIViewController的view是否已经被加载

图解:

代码验证:

 1 #import "AppDelegate.h"
 2 #import "TDViewController.h"
 3
 4 @interface AppDelegate ()
 5 @end
 6
 7 @implementation AppDelegate
 8
 9 - (BOOL)application:(UIApplication *)application
10     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
11
12   // 创建window
13   self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
14
15   // 1.没有同名xib情况下(不用sb 和 xib) alloc init
16   // 结论:透明的view
17   TDViewController *vc = [[TDViewController alloc] init];
18
19   // 2.通过 storyboard 创建
20   // 结论:View默认是白色(因为sb拖控制器的时候 就是白色),和指定sb的描述是一致的
21   UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
22   TDViewController *vc = [sb instantiateInitialViewController];
23
24   // 3.有指定xib情况下创建
25   // 结论:view和指定xib的描述是一致的
26   TDViewController *vc =
27       [[TDViewController alloc] initWithNibName:@"TD" bundle:nil];
28
29   // 4.有同名xib情况
30   // 结论:如果有同名的话,会有优先加载同名的 xib, 因此不需要 initWithNibName
31       TDViewController* vc = [[TDViewController alloc] init];
32
33   // 5.有同名去掉controller的情况
34   // 结论:如果有同名去掉controller的情况,优先级 会比 同名高
35   TDViewController *vc = [[TDViewController alloc] init];
36
37   self.window.rootViewController = vc;// 设置跟控制器
38   [self.window makeKeyAndVisible];// 显示
39
40   return YES;
41 }

 1 #import "TDViewController.h"
 2
 3 @interface TDViewController ()
 4 @end
 5
 6 @implementation TDViewController
 7
 8 - (void)viewDidLoad {
 9   [super viewDidLoad];
10 }
11
12 - (void)didReceiveMemoryWarning {
13   [super didReceiveMemoryWarning];
14 }
15
16 // 6.loadView 此方法用来重写vc的view
17 // 结论:比其他(xib sb 代码)的优先级都要高
18 - (void)loadView {
19   self.view = [[UIView alloc] init];
20   self.view.backgroundColor = [UIColor purpleColor];
21   NSLog(@"loadView");
22 }
23
24 @end

控制器view的加载

loadView方法仅在用代码创建视图控制器的界面时使用
在loadView方法中根据实际需求来确定到底是否需要调用[super loadView] 

Screen & Window & View Controller的关系 
内存警告处理
如果你觉得本篇文章对你有所帮助,请点击右下部“推荐”,^_^
作者:蓝田(Loto)
出处:http://www.cnblogs.com/shorfng/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
 

如有疑问,请发送邮件至 shorfng@126.com 联系我。
 
By:蓝田(Loto)

 

转载于:https://www.cnblogs.com/shorfng/p/5149910.html

1.2 控制器 view 的创建和加载相关推荐

  1. Android O: View的绘制流程(一): 创建和加载

    从这篇博客开始,我们会用几篇文章,  基于Android O的代码,分析一下View的绘制流程. 在分析具体的绘制流程前,我们先来了解一下XML中定义的View,  如何被创建和加载. 一.setCo ...

  2. ios-day11-04(控制器view的创建与延迟加载)

    控制器view的创建 假设控制器为MJViewController. 1,如果MJViewController重写了loadView方法,就根据loadView方法中的代码去创建view(即使load ...

  3. DCMTK:用于创建和加载增强型CT对象的测试

    DCMTK:用于创建和加载增强型CT对象的测试 用于创建和加载增强型CT对象的测试 用于创建和加载增强型CT对象的测试 #include "dcmtk/config/osconfig.h&q ...

  4. IOS 控制器View的创建方式(方式的优先级 、view的延迟加载)

    MJViewController的view的创建 的方式的优先级 控制器view的延迟加载 ● 控制器的view是延迟加载的:用到时再加载 ● 可以用isViewLoaded方法判断一个UIViewC ...

  5. 2018-11-13#Hive外表创建和加载数据

    hive 关联表和外表的区别: 1. 外部表需要external关键之,location是数据文件默认存放位置,不管是不管是select 还是load的数据都存放在这里.导入数据到外部表,数据并没有m ...

  6. iOS之深入了解控制器View的加载

    前言 在面试中,面试官可能会问这样的问题,loadView有什么作用,它与viewDidLoad有何区别? 首先我们得知道,控制器view是通过懒加载的方式进行加载的,即用到的时候再加载. loadV ...

  7. Tensorflow |(3)变量的的创建、初始化、保存和加载

    Tensorflow |(1)初识Tensorflow Tensorflow |(2)张量的阶和数据类型及张量操作 Tensorflow |(3)变量的的创建.初始化.保存和加载 变量的的创建.初始化 ...

  8. TensorFlow 教程 --进阶指南--3.2变量:创建、初始化、保存和加载

    变量:创建.初始化.保存和加载 当训练模型时,用变量来存储和更新参数.变量包含张量 (Tensor)存放于内存的缓存区.建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘.这些变量的值可在之 ...

  9. SpringMVC源码分析_1 SpringMVC容器启动和加载原理

                                                                    SpringMVC源码分析_1 SpringMVC启动和加载原理     ...

  10. PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard

    文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...

最新文章

  1. HTML5学习笔记(二):HTML基础学习之一
  2. ExtJS-Grid框增加复选框checkbox
  3. ArcEngine中画点画线画面
  4. IIS发布站点错误收集(持续更新)
  5. python拟合函数_Python-最小二乘法曲线拟合
  6. 第六届省赛(软件类)真题----Java大学A组答案及解析
  7. windows服务编写原理(上)
  8. 新视角:用图像分类来建模文字识别也可以SOTA
  9. 【BZOJ2149】拆迁队,分治+斜率优化DP
  10. Spring:Spring-过滤器Filter原理
  11. RabbitMQ消息队列:发布/订阅(Publish/Subscribe)
  12. 嵌入式实时音乐语音识别系统的实现
  13. LaTeX中的魔法注释
  14. 2020德勤面试开始了吗_曝!玛氏、德勤、携程面试题新鲜出炉!2020第一波面试复盘来了......
  15. CMUX协议学习总结
  16. java导出excel 图片_请教java导出多张图片到Excel问题!
  17. rasa实现同义词替换
  18. Ubuntu 安装之后无法连接网络问题
  19. 2021年6月四六级成绩查询时间!
  20. java 北京 就业_叩丁狼教育北京Java一期就业报道

热门文章

  1. Web Clip 图片变淡变浅变灰解决方案
  2. linux windows下重启oracle
  3. 宿舍小助手之个人分析NABCD
  4. $科大讯飞开放平台——语音听写接口的使用
  5. Apache 跟踪用户会话
  6. Oracle 索引的分类
  7. 3D世界相机防抖杆的机制探究
  8. UVA 11859 Division Game[Nim游戏]
  9. RedHat 7通过yum安装图形界面
  10. java多线程 Java核心技术 读书笔记