awakeFromNib 的好处?

Posted

技术标签:

【中文标题】awakeFromNib 的好处?【英文标题】:the Benifits of awakeFromNib? 【发布时间】:2011-06-23 07:45:04 【问题描述】:

我通过基于 xcode 导航控制器模板并勾选“使用 coredata”制作了许多简单的测试应用程序来学习 coredata。

App 委托中的 awakeFromNib 方法一直是我的问题来源,因为我正在向控制器添加其他视图并更改加载顺序,因此 RootViewController 可能是第二或第三选择。

我已经弄清楚 awakeFromNib 在做什么,并且我已经将其删除,因此应用程序委托不再与任何特定视图相关联。 (所以当我确实想加载 RootViewController 时,我会将它作为常规视图加载,并使用它自己的 viewDidLoad 来为视图初始化 managedObjectContext)。

我的问题:在 AppDelegate 中使用 awakeFromNIb 是否有性能提升或其他好处?或者它只是另一种做同样事情的方式,就像我从 viewDidLoad 方法做的一样?

【问题讨论】:

【参考方案1】:

所有方法在不同的时间和不同的情况下触发。

awakeFromNib 在从磁盘加载与类关联的 nib 文件时调用。任何可以拥有 nib 的班级都可以使用它。 viewDidLoad 仅由视图控制器使用。它通常在从 nib 加载时调用,但也可以由在内存中创建的视图调用(非常罕见的情况。)

在任何一种情况下,您只需要在第一次加载实例时只希望运行一次的功能。例如。 nubie 的一个常见错误是将代码放在每次视图出现时都需要运行的viewDidLoad 中。就像主视图打开详细视图,然后在详细视图被关闭时重新出现一样。如果主视图的代码在viewDidLoad 中,它只会在第一次加载主视图时运行,但不会在随后的任何时候主视图消失并重新出现。

在应用程序委托从 nib 唤醒时,您通常不会初始化任何其他视图或做任何事情。这通常在applicationDidFinishLaunching 中执行。

【讨论】:

好的,谢谢。我只是担心在应用程序委托中删除 awakeFromNib 并将初始化代码移动到 viewDidLoad 可能会降低性能。

以上是关于awakeFromNib 的好处?的主要内容,如果未能解决你的问题,请参考以下文章

awakeFromNib 啥时候被调用?

AwakeFromNib 没有出口

Cocoa - awakeFromNib 没有被调用

awakeFromNib 被多次调用

UIView 类别中的 -awakeFromNib

awakeFromNib 中都有哪些网点?