【问题标题】:How to initialize an NSObject's subclass on iPhone?如何在 iPhone 上初始化 NSObject 的子类?
【发布时间】:2009-03-02 13:51:50
【问题描述】:

我想在一个类中编写一些方法,以便其他类可以使用[instance methodName:Parameter]调用这些方法。

如果类是UIViewController的子类,我可以使用initWithNibName来初始化它。但是我想在NSObject的子类中编写方法,我该如何初始化呢?

【问题讨论】:

    标签: iphone initialization class-design subclass


    【解决方案1】:

    iphony 是正确的,但他或她并没有说您需要自己编写 init 方法。您的 init 方法通常应如下所示:

    - (id) init
        {
        if (self = [super init])
             {
             myMember1 = 0; // do your own initialisation here
             myMember2 = 0;
             }
        return self;
        }
    

    虽然apple documentation

    NSObject类中定义的init方法不做初始化;它只是返回自我。

    一个人可能只是想写

    - (id) init
      {
        myMember1 = 0; // do your own initialisation here
        myMember2 = 0;
        return self;
      }
    

    这是错误的,并且没有遵循文档中明确说明的内容:

    在这个 (init) 方法的自定义实现中,您必须调用 super 的 指定初始化器然后初始化并返回新对象。

    必须。不应该,可以,应该等等。

    你不应该假设 NSObject 的 init 在未来不会改变;也不是您的自定义类派生自的超类。

    【讨论】:

    • 是否需要[超级初始化]?因为 NSObject 的 init 方法的文档另有说明。
    • 永远不要忽略超级初始化!即使它什么都不做。文档明确地说:“在此方法的自定义实现中,您必须调用 super 的指定初始化程序,然后初始化并返回新对象。”我已经编辑了答案。
    【解决方案2】:

    我发现这可能有效:

    TheClass *newObject = [[TheClass alloc] init];
    //do something here
    [newObject release];

    【讨论】:

    • 这只是将对象“newObject”初始化为 TheClass 类。如果 TheClass 没有用“[super init]”和“return self;”实现“- (id)init”,你的初始化可能会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多