目标 C:init 和 awakeFromNib

Posted

技术标签:

【中文标题】目标 C:init 和 awakeFromNib【英文标题】:Objective C: init and awakeFromNib 【发布时间】:2013-08-06 07:56:02 【问题描述】:

我最近研究了一些基于 Cocoa 的开源项目。我看到很多程序的初始化代码都在 awakeFromNib 中,很少使用指定的初始化器。我习惯这样做:

在被覆盖的指定初始化器中:做所有非 Nib 的事情 在 awakeFromNib 中:做所有与 Nib 相关的事情

这种方法错了吗?

【问题讨论】:

【参考方案1】:

是的,没错,所有与 nib 相关的东西都应该在 awakeFromNib 方法中完成。在它被调用的那一刻,你已经从 nib 初始化并加载了视图,所以你已经可以配置和使用它了。

关于初始化器,请检查这个问题:ios: UIView subclass init or initWithFrame:?

指定的初始化器是所有其他初始化器必须调用的初始化器。 UIView 和子类有点不寻常,因为它们实际上有两个这样的初始化程序:-initWithFrame: 和 -initWithCoder:,这取决于视图的创建方式。你应该覆盖 -initWithFrame: 如果你在代码中实例化视图,和 -initWithCoder: 如果你从笔尖加载它。或者,您可以将代码放在第三种方法中并覆盖这两个初始化程序,以便它们调用您的第三种方法。事实上,这通常是推荐的策略。

【讨论】:

我实际上并没有询问技术细节,我的问题是:这种方法错了吗? 所以这里的问题是您期望回答“是”而没有解释?好的 然而,在 mac os x 和 NSView 类中并不总是调用 initWithFrame。技术细节在这里***.com/questions/5374076/…

以上是关于目标 C:init 和 awakeFromNib的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:释放和分配

目标 C:保留/释放内联分配的对象

目标c:如何设置UIImageView图像

目标c [复制]中NormalMethods和Selectors之间的差异

c语言中init是啥意思

方便的构造函数 ARC 目标 c