因此,如果我有一个课程,我可能会错过编写显式初始化。但在什么情况下编写“自己的”init是必要的?
答案 0 :(得分:2)
一旦初始化实例,您需要类将实例变量配置为已知状态。
此初始状态可能会受到来电者的影响,init
方法可能会受initWithSomething:
影响,有时则不会。
如果你有一个类与实例变量的初始状态无关,那么你不需要编写自己的init
方法。
您可能还希望为相关对象设置通知和其他绑定机制,这可能需要在init
方法中完成,除非有一些更合适的入口点(即方法)。
答案 1 :(得分:1)
如果您需要为您的班级提供重要值,您需要创建自己的初始值。
在你自己的课堂上永远不是必要的。这是一个设计问题。
答案 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