iPhone - 我应该如何编写一个 init 方法?
Posted
技术标签:
【中文标题】iPhone - 我应该如何编写一个 init 方法?【英文标题】:iPhone - How should I write an init method? 【发布时间】:2010-10-15 15:53:48 【问题描述】:我应该如何为一个继承 NSObject 的类编写一个 init 方法
假设我有一个名为: CustomButton 继承 UIButton 我有一个名为 CustomButton.nib 其中有一个 UIButton 在里面。 在界面生成器中,按钮的类名设置为“CustomButton”你将如何为这个类编写一个 init 方法,以便它从 nib 文件中加载?
【问题讨论】:
【参考方案1】:如果您需要在 CustomButton 中进行自定义初始化,请使用:
- (id)initWithCoder:(NSCoder *)decoder
if (self = [super initWithCoder:decoder])
/* do initialization here */
return self;
如果您直接在代码中实例化按钮,则不会调用此方法,仅在通过 nib 加载器实例化时才会调用。通过代码实例化意味着您需要使用initWithFrame
,因此请覆盖那个。您实际上可能希望 initWithCoder 和 initWithFrame 调用相同的 initAlways 方法或其他方法。
此外,了解 Objective-C 的“指定初始值设定项”概念也很重要(在 Objective C 文档中查找),因为它可能会让习惯于其他 OO 语言的人感到困惑。
【讨论】:
请提供您使用此 init 方法实例化对象的方式。 init 方法需要一个 NSCoder,1- 这个 nscorer 是什么? 2-我如何创建它? 3-我直接调用这个方法吗? 您不会自己实例化它。 nib 文件基本上是一组由 nib 加载器加载的序列化对象,因此 nib 加载器会为您处理所有 NSCoder 内容。你只需要确保在那里进行 [super ...] 调用。基本上像这样重写 initWithCoder 只是将您的代码插入到 nib 加载器所做的对象实例化中。希望这是有道理的...... 实际上,您可能想使用 awakeFromNib: 代替。我忘记了,呵呵。见***.com/questions/2663333/…以上是关于iPhone - 我应该如何编写一个 init 方法?的主要内容,如果未能解决你的问题,请参考以下文章
为 iPhone / iPad 编写单元测试的最佳方法是啥?