流程:判断是否view属性为nil,如果为空,调用loadView方法,如果重写了loadView方法,那么从代码创建普通视图,如果没有重写并且有storyBoard或者xib文件,那么从storyBoard加载视图,如果没有,那么创建一个空的view。

初始化:

第一种初始化方法:假如MainUIViewController类继承了UIViewController类,mainUIViewController是MainUIViewController的实例对象,当调用Init方法的时候【MainUIViewController *mainUIViewController = [[MainUIViewController alloc] init]】,[super init]父类的init方法会自动调用【- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil】方法,如果有个和MainUIViewController同名的xib文件,xib文件所属权为MainUIViewController,Custom Class设置为MainUIViewController,并且Outlets中的view和视图中的view相连接。那么[initWithNibName: bundle:]方法会加载此UIView。

第二种初始化方法:假如自定义了一个rootView.xib作为UIViewController的view,那么调用【MainUIViewController *mainUIViewController = [[MainUIViewController alloc] initWithNibName:@"rootView" bundle:nil]】此方法初始化自己的视图,同样rootView.xib文件也要进行第一种方法一样的设置。

第三步初始化方法:假如没有.xib文件,以代码的方式创建UIViewController中的视图,那么在MainUIViewController.m文件中重写父类的- (void)loadView方法,两种重写方法:1.[super loadView]父类方法是创建一个empty View;2.自己创建一个UIView对象,赋值给self.view。如:

- (void)loadView{
  UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
  self.view = view;
  [view release];
}

  如果使用storyBoard或者xib文件创建view的时候,就不能重写父类的loadView方法,如果自己手动代码创建,那么需要重写loadView方法。在调用完loadView时,视图就加载完成了,会自动调用viewDidLoad方法,一般情况下,数据对象是通过配置UIViewController的属性来提供的,如果UIViewController需要一些额外的属性,那么需要重写此函数来提供数据。

加载过程:

1.首先访问UIViewController的view属性,如果存在,则直接加载view,如果为nil,那么调用loadView方法

2.loadView可以从nib文件加载,也可以从storyboard加载,也可以创建一个空视图,可以在此创建其它的控件

3.loadView加载完视图自动调用viewDidLoad方法,可以准备需要的数据,访问网络等...

4.viewWillAppear方法在视图出现在屏幕之前所做的工作(默认不做任何工作:Default does nothing)

5.viewDidAppear方法表示视图已经在屏幕上显示(默认不做任何工作:Default does nothing)。

代码执行顺序:

1、alloc                               创建对象,分配空间
2、init (initWithNibName)      初始化对象,初始化数据
3、loadView                        载入视图以及动态创建其他控件,重写时可调用[super loadView]来承接父类的视图
4、viewDidLoad                   载入完成,可以进行自定义数据,重写时可以调用viewDidLoad来承接父类的视图和数据
5、viewWillAppear               视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear               视图已在屏幕上渲染完成

注意:当用get方法访问UIViewController中的View时(如:self.view),如果此时UIViewcontroller中的view为空nil;系统会自动调用- (void) loadView函数,每次访问都会进入此函数。在viewDidLoad方法中会访问ViewController对象中的view属性,所以在loadView方法中必须对其赋值,否则又会进入loadView方法,造成死循环!

  

最新文章

  1. 常用MySQL图形化管理工具
  2. 【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式
  3. Android Studio使用教程-菜单(Edit)
  4. Zookeeper总结
  5. Nginx重新编译添加模块
  6. C语言中运算符的口决
  7. 受限玻尔兹曼机(RBM)学习笔记(一)预备知识
  8. 用JS控制图片随鼠标移动
  9. Nginx反向代理+DNS轮询+IIS7.5 千万PV 百万IP 双线 网站架构案例
  10. 测试用(编写优质嵌入式C程序)
  11. 【初码干货】记一次分布式B站爬虫任务系统的完整设计和实施
  12. 在使用mybatis的selectFromExample时出现Invalid bound statement (not found)错误
  13. Mariadb第一章:介绍及安装--小白博客
  14. C# wnform 请求http ( get , post 两种方式 )
  15. Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。
  16. 01-VS充当IIS的配置步骤
  17. WCF安全:通过 扩展实现用户名密码认证
  18. Linux应急响应(二):捕捉短连接
  19. pytorch 学习问题
  20. Docker03 Docker基础知识、Docker实战

热门文章

  1. Linux makefile 教程 非常详细,且易懂 (转)
  2. https://my.oschina.net/huangyong/blog/161419
  3. http://blog.csdn.net/yangyuhan156/article/details/48899439
  4. http://tedhacker.top/2016/08/05/Spring%E7%BA%BF%E7%A8%8B%E6%B1%A0%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/
  5. myscroll
  6. 第三篇 SQL Server安全主体和安全对象
  7. jsp上传excel文件并导入数据库
  8. CString + UINT Error:有多个运算符"+="与这些操作数匹配
  9. linux查看公网地址
  10. Python:操作文件