您好,匿名用户
随意问技术百科期待您的加入

ViewController里的loadView和viewDidLoad什么区别

+1 投票

XCode生成的代码里
loadView方法直接就是空的
viewDidLoad方法有

[super viewDidLoad];

loadView为什么不需要调用super的方法呢?
如果调用了会发生什么

用户头像 提问 2013年 3月3日 @ hadoop 上等兵 (109 威望)
分享到:

1个回答

+1 投票
 
最佳答案

按住Option键,用鼠标点一下loadView,弹出来的文档里面解释的非常清楚,对你所有的疑问都有回答。下面是中文的简单翻译,但我还是建议你读一下文档。

当你访问一个ViewController的view属性时,如果此时view的值是nil,那么,ViewController就会自动调用loadView这个方法。这个方法就会加载或者创建一个view对象,赋值给view属性。

loadView默认做的事情是:如果此ViewController存在一个对应的nib文件,那么就加载这个nib。否则,就创建一个UIView对象。

如果你用Interface Builder来创建界面,那么不应该重载这个方法。

如果你想自己创建view对象,那么可以重载这个方法。此时你需要自己给view属性赋值。你自定义的方法不应该调用super。如果你需要对view做一些其他的定制操作,在viewDidLoad里面去做。

=========================================

根据上面的文档可以知道,有两种情况:

1、如果你用了nib文件,重载这个方法就没有太大意义。因为loadView的作用就是加载nib。如果你重载了这个方法不调用super,那么nib文件就不会被加载。如果调用了super,那么view已经加载完了,你需要做的其他事情在viewDidLoad里面做更合适。

2、如果你没有用nib,这个方法默认就是创建一个空的view对象。如果你想自己控制view对象的创建,例如创建一个特殊尺寸的view,那么可以重载这个方法,自己创建一个UIView对象,然后指定 self.view = myView; 但这种情况也没有必要调用super,因为反正你也不需要在super方法里面创建的view对象。如果调用了super,那么就是浪费了一些资源而已。

最后,还是建议遇到问题先看官方文档,里面对每个方法内部是怎么实现的,重载的时候需要注意什么都说的很清楚。

用户头像 回复 2013年 3月3日 @ 正能量 上等兵 (297 威望)
选中 2013年 3月3日 @Saber
提一个问题:

相关问题

0 投票
1 回复 27 阅读
用户头像 提问 2014年 1月30日 @ Viktor 上等兵 (290 威望)
+1 投票
1 回复 44 阅读
用户头像 提问 2012年 12月1日 @ hacker 上等兵 (362 威望)
0 投票
1 回复 65 阅读
用户头像 提问 2012年 12月1日 @ Trundle 上等兵 (301 威望)
+1 投票
1 回复 36 阅读
用户头像 提问 2013年 1月28日 @ Sejuani 上等兵 (427 威望)
0 投票
1 回复 26 阅读
用户头像 提问 2012年 12月1日 @ Kennen 上等兵 (442 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...