【发布时间】:2013-08-06 07:56:02
【问题描述】:
我最近研究了一些基于 Cocoa 的开源项目。我看到很多程序的初始化代码都在 awakeFromNib 中,很少使用指定的初始化器。我习惯这样做:
- 在被覆盖的指定初始化器中:做所有非 Nib 的事情
- 在 awakeFromNib 中:做所有与 Nib 相关的事情
这种方法错了吗?
【问题讨论】:
标签: objective-c cocoa initializer
我最近研究了一些基于 Cocoa 的开源项目。我看到很多程序的初始化代码都在 awakeFromNib 中,很少使用指定的初始化器。我习惯这样做:
这种方法错了吗?
【问题讨论】:
标签: objective-c cocoa initializer
是的,没错,所有与 nib 相关的东西都应该在 awakeFromNib 方法中完成。在它被调用的那一刻,你已经从 nib 初始化并加载了视图,所以你已经可以配置和使用它了。
关于初始化器,请检查这个问题:iOS: UIView subclass init or initWithFrame:?
指定的初始化器是所有其他初始化器必须调用的初始化器。 UIView 和子类有点不寻常,因为它们实际上有两个这样的初始化程序:-initWithFrame: 和 -initWithCoder:,这取决于视图的创建方式。你应该覆盖 -initWithFrame: 如果你在代码中实例化视图,和 -initWithCoder: 如果你从笔尖加载它。或者,您可以将代码放在第三种方法中并覆盖这两个初始化程序,以便它们调用您的第三种方法。事实上,这通常是推荐的策略。
【讨论】: