为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2019-12-20 10:58:07
我最近在我的应用程序中遇到问题,我在UIViewController子类的-awakeFromNib方法中创建的某些子视图 从视图中消失了。经过一番摸索之后,我发现移动我输入的代码-awakeFromNib可以-viewDidLoad解决问题。似乎-awakeFromNib在从笔尖取消存档UIViewController时仅调用一次,并且-viewDidLoad在每次取消存档视图时都调用一次。那么最佳实践是什么?看来UIViewController -awakeFromNib不应在视图中添加任何视图,而应该在中完成-viewDidLoad。我理解正确吗?还是我比我想的更困惑?
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-12-20
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-12-20
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我将通过举一个例子来回答:

如果定义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之后。对于从笔尖未存档的视图控制器,这是在设置视图之后。


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 574 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信