因此,如果我有一堂课,我可能会错过编写显式初始化。但是在什么情况下可能需要编写“自己的”init?
问问题
52 次
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 回答