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

我最近在我的应用程序中遇到问题,我在UIViewController子类的-awakeFromNib方法中创建的某些子视图 从视图中消失了。经过一番摸索之后,我发现移动我输入的代码-awakeFromNib可以-viewDidLoad解决问题。似乎-awakeFromNib在从笔尖取消存档UIViewController时仅调用一次,并且-viewDidLoad在每次取消存档视图时都调用一次。

那么最佳实践是什么?看来UIViewController -awakeFromNib不应在视图中添加任何视图,而应该在中完成-viewDidLoad。我理解正确吗?还是我比我想的更困惑?


慕村9548890
浏览 579回答 3
3回答

Helenr

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

慕码人8056858

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

至尊宝的传说

我将通过举一个例子来回答:如果定义customCell类和customCell.xib文件,然后使用加载单元格- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options,则在未归档xib中的对象时将调用awakeFromNib。如果定义customViewController,则customViewController使用创建时- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil。当viewDidLoad加载到视图层次结构中时,它将被调用。一些相关的混淆方法:(void)loadView; 如果子类不使用笔尖,则应在此处创建其自定义视图层次结构。如果未指定笔尖名称,则loadView将尝试加载名称与视图控制器类相同的笔尖。如果不存在此类笔尖,则必须在调用-view之前调用-setView:,或重写-loadView方法以编程方式设置视图。-loadView绝对不能直接调用。(void)viewDidLoad:加载视图后调用。对于用代码创建的viewController,它在-loadView之后。对于从笔尖未存档的视图控制器,这是在设置视图之后。
打开App,查看更多内容
随时随地看视频慕课网APP