我已经使用 Objective-C 几年了,但我仍然不确定如何初始化一个对象。我们的问题是这样的:
-(id)init {
self = [super init];
if (self) {
self.backgroundColor = [UIColor blueColor];
self.textColor = [UIColor greenColor];
}
return self;
}
-(id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor yellowColor];
}
return self;
}
在两种方法中使其初始化相同意味着复制和粘贴编码(巨大的不,不,由于人为错误导致无穷无尽的问题,例如值不同,如上例所示)或新方法:
-(id)init {
self = [super init];
if (self) {
[self initialSetup];
}
return self;
}
-(id)initialSetup {
self.backgroundColor = [UIColor blueColor];
self.textColor = [UIColor greenColor];
}
这就会产生一个问题,如果子类有一个initialSetup
方法,超类调用[self initialSetup]
将调用子类的initialSetup
,从而忽略所有超类的设置。您可以通过每次附加类名来解决此问题,例如initialSetupTextField
.
不过,这似乎相当混乱。这一切都只是为了初始化一个对象。其他人如何做到这一点?