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

    为多个元素绑定同一个事件: $(document).on('click', '#header .fixed-feedback-bn, #sb-sec .feedback-bn', function ( ...

  2. FFmpeg和X264的交叉编译环境

    在下载好了FFmpeg和X264的源码包之后,在Linux下进行安装的基本流程就是切换到其源码的根目录,然后以此执行以下命令.基本上所有的开源源码包的默认编译安装都是这三步. ./configure ...

  3. 读取图像,LUT以及计算耗时

    使用LUT(lookup table)检索表的方法,提高color reduce时对像素读取的速度. 实现对Mat对象中数据的读取,并计算color reduce的速度. 方法一:使用Mat的ptr( ...

  4. nexus的使用

    一.在百度网盘或官网下载nexus,并部署.   注意修改: https://repository.apache.org/content/repositories/releases/    二.下载m ...

  5. maven 配置问题

    ① 错误 Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver' 原因:pom.xml文件下载ojdbc14-10.2.0.3. ...

  6. BUG-FREE-For Dream

    一直直到bug-free.不能错任何一点. 思路不清晰:刷两天. 做错了,刷一天. 直到bug-free.高亮,标红. 185,OA(YAMAXUN)--- (1) findFirstDuplicat ...

  7. Mac 安装配置rz、sz

    在Iterm2中修改配置: 安装lrzsz brew install lrzsz 下载iterm2-zmodem cd /usr/local/bin sudo wget https://raw.git ...

  8. 关于imageOrientation

    用相机拍出来的照片都含有EXIF信息,UIImage的imageOrientation属性指的就是EXIF中的orientation信息.如果我们忽略orientation信心,而直接对照片进行想速处 ...

  9. js_面向对象

    面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...

  10. tp5 中 model 的获取器

    在获取数据的字段值后自动进行处理 // 模型中写入如下代码,则查询结果会自动将status的结果进行转换 class User extends Model { public function getS ...