在Stephen Kochan的Objective-C一书(我有第3版)中,一个init函数返回Fraction *
,一个返回id
:
-(Fraction *) initWith: (int) n: (int) d {
self = [super init];
if (self)
[self setTo: n over: d];
return self;
}
-(id) init {
return [self initWith: 0 over: 0];
}
(见本书第198至199页)。为什么会这样,如果两者都返回Fraction *
或两者都返回id
(或让init
返回Fraction *
而initWith
返回id
,这是否重要? )?这样做会产生什么副作用?
答案 0 :(得分:1)
Init
方法通常返回id
类型,因为它们不一定返回它们所属类的对象。
例如,-[NSMutableArray init]
实际上返回了一个NSCFMutableArray
对象。
答案 1 :(得分:1)
赞成从初始化程序返回id
。
您可以使用其他语法,但在实践中它非常嘈杂(除非您从未进行过子类化并保证选择器是唯一的。)
便捷构造函数很好,但最安全的是将类型名称添加到构造函数中:
+ (Fraction *)newFractionWithNumerator:(int)pNumerator denominator:(int)pDenominator;
如果没有这些措施,您的程序将会遇到几个编译器警告和错误。