UIViewController中的loadView方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)。
以上是关于UIViewController中的loadView方法的主要内容,如果未能解决你的问题,请参考以下文章
UIViewController 中的 UITableView - 将单元格连接到 UIViewController
UIViewControllers 中的 UIViewController
如何从创建的 UIViewController 中的另一个 UIViewController 执行功能
从 swiftUI 中的一个嵌入式 UIViewController 导航到 swift UI 中的另一个嵌入式 UIViewcontroller
如何在 UITabBarViewController 中的 UINavigationController 中深度链接到从 UIViewController 访问的 UIViewController?