本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末
如果觉得本文内容过长,请前往本人 “简书
 
 
 
加载优先顺序:
  • 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是否已经被加载

图解:

代码验证:

 #import "AppDelegate.h"
#import "TDViewController.h" @interface AppDelegate ()
@end @implementation AppDelegate - (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 创建window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // 1.没有同名xib情况下(不用sb 和 xib) alloc init
// 结论:透明的view
TDViewController *vc = [[TDViewController alloc] init]; // 2.通过 storyboard 创建
// 结论:View默认是白色(因为sb拖控制器的时候 就是白色),和指定sb的描述是一致的
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
TDViewController *vc = [sb instantiateInitialViewController]; // 3.有指定xib情况下创建
// 结论:view和指定xib的描述是一致的
TDViewController *vc =
[[TDViewController alloc] initWithNibName:@"TD" bundle:nil]; // 4.有同名xib情况
// 结论:如果有同名的话,会有优先加载同名的 xib, 因此不需要 initWithNibName
TDViewController* vc = [[TDViewController alloc] init]; // 5.有同名去掉controller的情况
// 结论:如果有同名去掉controller的情况,优先级 会比 同名高
TDViewController *vc = [[TDViewController alloc] init]; self.window.rootViewController = vc;// 设置跟控制器
[self.window makeKeyAndVisible];// 显示 return YES;
}
 #import "TDViewController.h"

 @interface TDViewController ()
@end @implementation TDViewController - (void)viewDidLoad {
[super viewDidLoad];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} // 6.loadView 此方法用来重写vc的view
// 结论:比其他(xib sb 代码)的优先级都要高
- (void)loadView {
self.view = [[UIView alloc] init];
self.view.backgroundColor = [UIColor purpleColor];
NSLog(@"loadView");
} @end

控制器view的加载

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

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

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

1.2 控制器 view 的创建和加载的更多相关文章

  1. 创建控制器的3种方式、深入了解view的创建和加载顺序

    转载自:http://blog.csdn.net/weisubao/article/details/41012243 (1)创建控制器的3种方式 - (BOOL)application:(UIAppl ...

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

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

  3. unity创建和加载AssetBundle

    先说一下为什么要使用AssetBundle吧,以前做东西一直忽略这个问题,现在认为这个步骤很重要,代码是次要的,决策和为什么这样搞才是关键. 一句话概括吧,AssetBundle实现了资源与服务分离, ...

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

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

  5. [ IOS ] iOS-控制器View的创建和生命周期

    reference to  : 1. 控制器View的创建 首先我们来看一下控制器view创建的流程图 控制器view加载.jpeg 从图中我们可以看出,在控制器view加载过程中有两个重要的方法lo ...

  6. iOS中View的创建过程

    ios应用中控制器view的创建方式有三种:storyboard.xib和代码,当APP启动后View的具体加载过程如图(苹果官方): 假设我使用的是WYSViewController控制器 应用启动 ...

  7. 创建控制器的方法、控制器加载view过程、控制器view的生命周期、多控制器组合

    在介绍四大对象的那篇博客中,可以基本了解到程序启动的过程: main-->UIApplicationMain-->创建UIApplication的实例和app代理AppDelegate的实 ...

  8. iOS开发UI篇—控制器的View的创建

    iOS开发UI篇—控制器的View的创建 一.6种创建控制器View的方式 #import "NJAppDelegate.h" #import "NJViewContro ...

  9. 【转】 iOS开发UI篇—控制器的View的创建

    最近对view的周期等还不是非常清楚,就找到顶哥的文章,非常不错,就搬运过来了. 原文: http://www.cnblogs.com/wendingding/p/3770760.html 一.6种创 ...

随机推荐

  1. ElasticSearch+ElasticGeo+Geoserver发布ES地理数据

    依赖GeoserverElasticSearchElasticGeo部署部署ElasticGeo使用创建ES数据源并发布发布 依赖 Geoserver 环境搭建参考: ElasticSearch 环境 ...

  2. ORACLE_UNQNAME

    之前在自己笔记本win7系统上安装了oracle 11g,当时为了节省资源,没启用EM. 此时查看EM状态: C:\Windows\system32>emctl status dbconsole ...

  3. 读《Android编程权威指南》

    因为去年双十二购买了一折的<Android 编程权威指南(第一版)>,在第二版出来后图灵社区给我推送了第二版的优惠码,激动之余就立马下单购买电子书,不得不说Big Nerd Ranch G ...

  4. js对Cookie的读写操作

    //读Cookie function getCookie(objName) {//获取指定名称的cookie的值 var arrStr = document.cookie.split("; ...

  5. linux常用命令的介绍

    本文主要介绍Linux常用命令工具,比如用户创建,删除,文件管理,常见的网络命令等 如何创建账号: 1. 创建用户 useradd -m username -m 表示会在/home 路径下添加创建用户 ...

  6. iOS block

    主要内容: block基本声明格式 block访问区域变量 block代替代理 block基本声明格式: ^(传入的参数){具体代码}; 注: Block实体开头是"^",接着是由 ...

  7. 修改一个CGRect的值

    // 1. 用一个临时变量保存返回值. CGRect temp = self.view.frame; // 2. 给这个变量赋值. temp.size.width = kWIDTH; // 3. 修改 ...

  8. JavaCV配置

    下载javacv-1.2-bin.zip https://github.com/bytedeco/javacv 解压 在Eclipse项目 Referenced Libraries 中 Add Ext ...

  9. width:100%;与width:auto;的区别

    <div> <p>1111</p> </div> div{ width:980px; background-color: #ccc; height:30 ...

  10. 配置ntp服务

    配置ntp服务(hadoop搭建可参考) 一:修改选定的服务器的本地时间 date -s '2016-10-07 16:29:30' +'%F %T' //需要设置的时间 二:修改后将时间写入到硬件时 ...