0

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

4

4 回答 4

2

当您需要类在实例初始化后立即将实例变量配置为已知状态时。

这种初始状态可能会受到调用者的影响,使用init类似initWithSomething:或有时不使用的方法。

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

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

于 2013-11-14T10:04:31.947 回答
1

当您需要为您的类初始化重要值时,您需要创建自己的 init。

在你的“自己的”课堂上从来没有必要。这是一个设计问题。

这对您来说可能很有趣: Constructor_(object-oriented_programming)

于 2013-11-14T10:03:25.933 回答
0

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

于 2013-11-14T10:03:59.377 回答
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
于 2013-11-14T10:33:35.723 回答