我已经在Objective-C中编程多年了,我总是碰到这个问题:如果你有一个带有多个初始化器的对象,但是它们都有共同的代码,你如何将它解压出来?
我能想到的最好的是这样的:
@implementation Example
- (void)privateInitWithString:(NSString*)aString
{
self.str = aString;
}
- (id)init
{
self = [super initWithWindowNibName:@"MyNib"]
if(self) {
[self privateInitWithString:@""];
}
return self;
}
- (id)initWithString:(NSString*)aString
{
self = [super initWithWindowNibName:@"MyNib"]
if(self) {
[self privateInitWithString:aString];
}
return self;
}
@end
代码闻到的各个初始化程序有很多重复。但是,我想不出一种方法可以让一个初始化程序“落到”另一个初始化程序,因为无法保证在调用self
之前已设置[super init]
我缺少最佳做法吗?
答案 0 :(得分:4)
您编写一个“指定的初始化程序”。初始化程序处理所有不同的情况。在你的情况下,initWithString似乎是一个很好的候选人。而init就变成了
- (instancetype)init { return [self initWithString:@""]; }
您可以在此处详细了解: