ios - loadView与viewDidload
- 从打印结果可以看出,先调用loadView再调用viewDidload
- 代码:
//
// ViewController.m
// test
//
// Created by 裴波波 on 16/4/12.
// Copyright © 2016年 裴波波. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)loadView{
NSLog(@"loadView");
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
打印结果

看打印可以了解到先调用了loadview,再调用了viewDidload方法.
为什么分别调用了两次?
- loadView和viewDidLoad的区别就是,调用loadView时view还没有生成,调用viewDidLoad时,view已经生成了.
- 当调用loadview时,view为空, -> 调用viewdidload控制器仍然没有自己的view,此时再次调用loadview方法让控制器生成一个黑色的view.
- 注意点: 此时如果调用了loadview当时没有给viewController指定一个view的话,不能在viewdidload方法中用self.view = 某个view,此时如果调用view的set或者get方法都会使程序进入无限死循环中.看代码
viewDidload中
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%p",self.view);
NSLog(@"viewDidLoad");
}
打印结果

程序陷入无限循环
原因: 调用了self.view就相当于调用了loadview,由于重写loadview的方法时并没有给控制器的view指定一个view,所以会一直死循环下去...
解决办法之一就是在loadview方法中给self.view指定一个view
-(void)loadView{
UIView * view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
view.backgroundColor = [UIColor blueColor];
self.view = view;
NSLog(@"loadView");
}
此时打印结果

并且模拟器颜色为蓝色bluecolor
小结:调用loadview方法,要给控制器指定view.否则在viewdidload方法中调用self.view(view的set或者get方法)都会使程序进入死循环.
如果在loadview与viewdidload中都给控制器指定了view,那么从调用方法的顺序上看可以得到结果:最后被调用的viewdidload方法中的view会覆盖掉loadview中给控制器设置的view.
为了加深理解看官方文档

文档上说:当控制器的view为nil时,会调用这个方法,这个方法会创建一个view给控制器.

- 如果控制器从xib加载控制的view,则你可以调用此方法来加载xib--> initWithNibName:bundle: 或者不调用此方法,控制器会根据有没有一个xib名字跟控制器类名一样的,如果一样就加载这个跟控制器名字一样的xib文件作为控制的view.如果没有xib来初始化控制器的view的话,则这个方法loadview会创建一个空白的view给控制器.

- 如果用storyboard初始化控制器,就不用调用loadview方法了.

- 如果重写这个方法给控制器创建view则这个view必须是一个单例,而且不能被其他的控制器使用.并且不可以调用super
- 如果想初始化自定义的view,则在viewdidload中初始化即可.
综上:不建议使用loadview,可以根据自己的需要在storyboard或者viewdidload中创建自己需要的view给控制器.
视图控制器的生命周期

ios - loadView与viewDidload的更多相关文章
- iOS开发之loadView和viewDidLoad总结
http://www.1000phone.net/forum.php?mod=viewthread&tid=10507&extra=page%3D1%26filter%3Dauthor ...
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
- IOS中的ViewController 的loadView、viewDidLoad、viewDidUnload
由init.loadView.viewDidLoad.viewDidUnload.dealloc的关系说起: 1 init方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方 ...
- loadView 与 ViewDidLoad
每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的initWithNibName/awakeFromNib/initWithCod ...
- loadView与viewDidLoad不同 && loadView学习总结
loadView学习总结 UIViewController类或其子类会在初始化时创建一个UIView对象,会作为控制器的默认视图显示出来,可以通过self.view寻址访问.但没有调用loadView ...
- ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告
##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...
- loadView 和 viewDidLoad、viewDidunload 的区别
loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法. 他们都可以用来在视图载入的时候初始化一些内容. 但是他们有什么区别呢? viewDidLoad 方法只有当 ...
- loadView 与 viewDidLoad 和 didReceiveMemoryWarning与viewDidUnload 详解
首先试验下:viewController初始化 分两个支路:initWithNibName加载初始化 及 init 直接初始化: <1>调用initWithNibName加载一个xib界面 ...
- ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?
由init.loadView.viewDidLoad.viewDidUnload.dealloc的关系说起 init方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初 ...
随机推荐
- jQuery 循环问题
$("#add2sub").click(function(){ var $sxarr=$(".add_shuxing_ul > .sx_add_bg"); ...
- 分模块创建maven项目(二)
1.新建Parent项目,MavenProject 2.新建子模块项目,MavenProject 右击项目名 --> NEW --> other 结果,在parent上运行会打出两个包,一 ...
- python--range()函数
1: >>> range(10, 0, -1) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] >>> range(10) [0, 1, 2, 3, ...
- Error #include nested too deeply
转载:http://blog.csdn.net/ysdaniel/article/details/7043395 出现 Error #include nested too deeply 原因是: 头文 ...
- iOS Notification 的使用
Notification post notification,notification,notification,notification,notification,n otification ,no ...
- Odoo Xml Datetime 类型显示为 Date类型
<field name='date_order' widget='date'/> 利用date widget即可使dateime类型的显示为date.
- JAVA生成二维码图片代码
首先需要导入 QRCode.jar 包 下载地址看这里 http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt. ...
- springMVC工作机制和框架搭建配置说明
先说一下springMVC的工作机制 1.springmvc把 所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作. 2.Dispatcher ...
- jq制作博客已存在多少天
function current(){ var d=new Date(),str=''; var date=((d.getMonth()+1)*30+(d.getFullYear())*365+d.g ...
- html5学习小结,float练习。
经过两天的H5学习之后,做了一下float属性的练习,要做出来的效果为: 下面为代码部分,所用到的知识不多,不过才现在刚开始,以后要学的东西还有很多,大家继续加油! <!DOCTYPE html ...