当前位置:  开发笔记 > IOS > 正文

我应该使用哪个-awakeFromNib或-viewDidLoad?

如何解决《我应该使用哪个-awakeFromNib或-viewDidLoad?》经验,为你挑选了4个好方法。

我最近在我的应用程序中遇到了一个问题,我在UIViewController子类的-awakeFromNib方法中创建的一些子视图正 从视图中消失.经过一番探索之后,我发现移动我输入的代码-awakeFromNib-viewDidLoad解决问题.-awakeFromNib当UIViewController从nib中取消归档时,似乎只调用一次,并且-viewDidLoad每次取消归档视图时都会调用它.

那么最佳做法是什么?看起来UIViewController -awakeFromNib不应该向视图添加任何视图,应该完成那种东西-viewDidLoad.我理解正确吗?还是我比我想的更困惑?



1> Lily Ballard..:

awakeFromNib控制器本身从笔尖取消归档时调用.viewDidLoad在创建/取消存档视图时调用.当控制器的视图存储在单独的nib文件中时,这种区别尤为重要.


iOS开发者要小心[iOS上的行为不同](http://stackoverflow.com/a/2196262/618653)

2> Prcela..:

同样重要的是,awakeFromNib从内存警告恢复后永远不会调用该函数.但是,该viewDidLoad函数将被调用.


@khunshan不,iOS中的视图不再像过去那样自动卸载.
它在2016年仍然有效吗?

3> Mehrdad Afsh..:

是的,这是对的.你不应该真的依赖于awakeFromNib做那种任务.

awakeFromNib类似于在.NET中反序列化后调用的事件.viewDidLoad类似于Load.NET中的事件.

如果您熟悉.NET中的概念,我认为这应该足够了.



4> hrchen..:

我将尝试通过举例来回答:

如果定义customCell类和customCell.xib文件,然后通过使用加载单元格
- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options,则在取消归档xib中的对象时调用awakeFromNib.

如果您定义了a customViewController,那么在customViewController使用时创建- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil.viewDidLoad在加载到视图层次结构中时将被调用.

一些相关的混淆方法:

(空隙)的loadView; 这是子类在不使用nib时应创建自定义视图层次结构的位置.如果未指定nib名称,则loadView将尝试加载名称与视图控制器类相同的nib.如果不存在这样的nib,则必须在调用-view之前调用-setView:或覆盖-loadView方法以编程方式设置视图.永远不应该直接调用-loadView.

(void)viewDidLoad:在加载视图后调用.对于在代码中创建的viewControllers,这是在-loadView之后.对于从nib取消归档的视图控制器,这是在设置视图之后.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有