我是否需要为类创建自己的init?如果没有,在什么情况下编写自己的init是必要的?

时间:2013-11-14 09:59:28

标签: objective-c initialization

因此,如果我有一个课程,我可能会错过编写显式初始化。但在什么情况下编写“自己的”init是必要的?

4 个答案:

答案 0 :(得分:2)

一旦初始化实例,您需要类将实例变量配置为已知状态。

此初始状态可能会受到来电者的影响,init方法可能会受initWithSomething:影响,有时则不会。

如果你有一个类与实例变量的初始状态无关,那么你不需要编写自己的init方法。

您可能还希望为相关对象设置通知和其他绑定机制,这可能需要在init方法中完成,除非有一些更合适的入口点(即方法)。

答案 1 :(得分:1)

如果您需要为您的班级提供重要值,您需要创建自己的初始值。

在你自己的课堂上永远不是必要的。这是一个设计问题。

这可能对您有意义: Constructor_(object-oriented_programming)

答案 2 :(得分:0)

创建init方法不是强制性的,但建议将变量初始化为默认值。

答案 3 :(得分:0)

建议您编写自己的init来初始化类的状态,因为最好明确实例变量的值以避免错误的假设。

示例:

@interface ClassA : NSObject {

    // no ivars

}

@end

@implementation ClassA

// no init as there is no state for you to initialize

- (void)methodA {

}

//...

@end

@interface ClassB : NSObject {

    // ivars here
    BOOL isDateSet;
    NSDate *date;

}

@end

@implementation ClassB

// init here because there are instance variables present in ClassB
- (id)init {
    if (self = [super init]) {
        isDateSet = NO;
        date = [NSDate distantPast];
    }
}

- (void)methodB {

}

//...

@end