我正在读的书“Cocoa Design Pattern”,其点2,第3章(两阶段创建)是让我困惑。为什么要重写超类的指定初始值设定项?
请确保超类的指定初始化程序被覆盖以调用新的指定初始化程序。
子类时,确保每一个新的初始化未在指定的初始化调用指定的初始化。
我的问题是我们如何调用我们没有参数传递的方法?本书示例正在下面发布。在这种方法中,作者已经传递了一些“静态”值,但我们应该这样做吗?或者这总是可取的?
我的第二个问题是,为什么我必须重写超类的指定方法,当我将初始化我的对象时,我永远不会调用它,而不是在我自己指定的初始化器中,在那里我不会传递任何参数(例如,在NSObject的情况下)
@interface MYCircle : NSObject {
NSPoint center;
float radius;
}
// Designated Initializer
- (id)initWithCenter:(NSPoint)aPoint radius:(float)aRadius;
@end
@implementation MYCircle
// Designated Initializer
- (id)initWithCenter:(NSPoint)aPoint radius:(float)aRadius {
self = [super init];
if(nil != self) {
center = aPoint;
radius = aRadius;
}
return self;
}
@end
// Overriden inherited Designated Initializer
- (id)init {
static const float MYDefaultRadius = 1.0f;
// call Designated Initializer with default arguments
return [self initWithCenter:NSZeroPoint radius:MYDefaultRadius];
}
也请帮我纠正了我的问题,因为我不知道我要问的是一个正确的问题。
谢谢。