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 编写单元测试的最佳方法是啥?

如何在iphone中获取当前位置的纬度经度?

开发 iPhone 和 iPad 分离的应用程序版本

iPhone 的线路电平分析

在 3rd 方 iPhone 应用程序中支持照片和视频的 AirPlay

如何在(子)模块中使用 __init__.py 来定义命名空间?