UIViewController中的loadView方法

一、死循环(self.view为nil)

@implementation ViewController

- (void)loadView{
    NSLog(@"loadView.......");
}

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewdidLoad.....");
    UIView *selfView = self.view;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

运行结果是:

2016-02-29 11:54:42.778 Test6[849:84362] loadView.......

2016-02-29 11:54:42.925 Test6[849:84362] viewdidLoad.....

...........循环出现

原因分析:因为UIViewController没有对应的nib文件,因此会进入loadView方法,然而loadView没有实例化self.view,进入viewDidLoad后用到self.view对象,由于self.view为nil,导致调用loadView方法。所以一直在loadView和viewDidLoad两个方法中循环执行。

二、系统UIViewController类提供的loadView功能

当存在nib时,执行nib;

当不存在nib时,创建一个frame为(0,0,width,height)的视图。

三、UIViewController实例化self.view的方式

1、创建nib文件,在nib中设置view;

2、没有nib文件时,不重写loadView方法,默认使用父类的loadView创建一个frame为(0,0,width,height)的视图。

3、没有nib文件时,重写loadView方法,将自定的UIView赋值“=”给self.view

上面三种方式,缺一不可!!!

四、iOS9前后

在iOS9之前,系统为UIViewController自动创建的view的frame为(0,20,width,height),是因为用的是[UIScreen applicationFrame]方法。

但是iOS9之后,[UIScreen applicationFrame]方法被弃用,使用的是[UIScreen bounds]方法。因此frame为(0,0,width,height)。

时间: 2024-10-05 20:54:37

UIViewController中的loadView方法的相关文章

iOS --- UIViewController中的loadView使用场景

问题 先看代码, 新建一个UIViewController的子类TestViewController(包含nib文件),imageViewCourse和lbCourse是其两个属性,通过nib的IBOutlet方式添加. TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil]; testViewContro

转:UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

(转)UIViewController中各方法调用顺序及功能详解

目录(?)[-] 1 initWithNibNamebundle 2 loadView 3 viewDidLoad 4 viewWillAppear 5 viewDidAppear 6 viewWillLayoutSubviews 7 viewDidLayoutSubviews 8 viewWillDisappear 9 viewDidDisappear 10 viewWillUnload 11 viewDidUnload UIViewController中loadView, viewDidLo

UIViewController中view的释放过程

第一.viewDidUnload方法 1.调用时机: 内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方.当系统内存吃紧的时候会调用该方法,释放view,释放的view必须是已经在内存的view,即通过viewdidload之后的view,而不是controller,在iphone应用程序,可以controller已经创建,但是view可以没有进内存,另外该方法不会是v

IOS viewDidLoad方法被执行两次(viewDidLoad和loadView方法详解)

为了搞清楚viewDidLoad.loadView等方法的用途和调用顺序,写了一个小demo,不料viewDidLoad方法被执行了两次,模拟器也一直是黑屏.查看了这两个方法的官方解释后找到了错误原因和解决方法. 首先来看UIViewController.h文件中对viewDidLoad方法的解释: - (void)viewDidLoad; // Called after the view has been loaded. For view controllers created in code

IOS5中的新增方法详解

苹果在 iOS5 中给 UIViewController 新增加的 5 方法以及一个属性: addChildViewController: removeFromParentViewController:transitionFromViewController:toViewController:duration:options:animations:completion: willMoveToParentViewController: didMoveToParentViewController:/

IOS开发中重写init方法使用需谨慎

IOS开发中重写init方法使用需谨慎 今天在写一个小软件的时候出现一点问题,这个软件的功能是搜索全国学校,首页就是搜索输入框,在框中输入完要查询的学校所在省份,点击buttom后就会跳转到对应的视图控制器中,然后把搜索结果呈现在一个TableView上,但是我在调试时,每次输入完然后点击搜索按钮时,弹出结果列表总是空的,我需要返回到首页再点击一次搜索才会出现结果,而且我在首页更改搜索关键字之后,点击搜索,结果还是上次的搜索结果,必须返回点击一次才会出现这次的搜索结果. 经过大神指点,原来这个问

UIViewController中的view自动排版(ios6和ios7)

问题提出,ios6和ios7中视图控制器的创建中的view的是会自动排版的,就是你自定义其中的view,也改变不了其尺寸,ios6自定义的尺寸是{{0, 20}, {320, 460}},ios7自定义的尺寸是{{0, 0}, {320, 480}}这就为兼容性造成很大的困扰? //解决方案,苹果这么设计貌似是为了自动匹配设备方向的改变,那么我们就可以在设备支持方向里面进行尺寸的修改, eg:- (BOOL)shouldAutorotateToInterfaceOrientation:(UIIn