【问题标题】:iPhone - How should I write an init method?iPhone - 我应该如何编写一个 init 方法?
【发布时间】:2010-10-15 15:53:48
【问题描述】:

我应该如何为一个继承 NSObject 的类编写一个 init 方法

  • 假设我有一个名为: CustomButton 继承 UIButton
  • 我有一个名为 CustomButton.nib 其中有一个 UIButton 在里面。
  • 在界面生成器中,按钮的类名设置为“CustomButton”

你将如何为这个类编写一个 init 方法,以便它从 nib 文件中加载?

【问题讨论】:

    标签: iphone objective-c initialization 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: 代替。我忘记了,呵呵。见stackoverflow.com/questions/2663333/…
    猜你喜欢
    • 2012-12-13
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多