-(id)initWithStrAndDate: (NSString *)inString date:(NSDate *)inDate { if (self = [super init]) { [self setStr:inString]; [self setDate:inDate]; } return self; } -(id)initWithStr: (NSString *)inString { return [self initWithStrAndDate:inString date:[NSDate date]]; } -(id)init { return [self initWithStr:nil]; }
嘿伙计们,我不确定我是否知道如何使用“指定的初始化程序”.首先不是
return [self initWithStrAndDate:inString date:[NSDate date]];
这个错了?不应该这样:
return [self initWithStrAndDate:inString date:nil];
还有为什么我们使用3种不同的初始化器?我的意思是什么时候我们使用“ – (id)init”或“ – (id)initWithStr:(NSString *)inString”或第一个?
解决方法
有3个不同的初始值设定项,因此您可以使用其中任何一个 – 它们中的任何一个都不对,它们允许您使用可变数据初始化类 – 主要是为了方便,因为它们最终都做同样的事情.
您可以使用指定的字符串和日期(第一个和最长的初始化程序)初始化类,
或者您只能指定字符串并将日期设置为当前时间,
或者你可以有一个空字符串和当前时间.
请注意:
[self init];
等于打电话
[self initWithStr: nil];
而这又等于
[self initWithStrAndDate: nil date:[NSDate date]];
所以最后你要调用相同的初始化器.