【发布时间】:2011-04-22 06:57:16
【问题描述】:
我正在阅读“Cocoa Design Pattern”一书,其中第 3 章(两阶段创作)中的 2 点让我感到困惑。
确保重写超类的指定初始化程序以调用新的指定初始化程序。
子类化时,确保每个不是指定初始化器的新初始化器都调用指定初始化器。
我的问题是我们如何调用我们没有要传递的参数的方法?本书示例发布在下面。在这个方法中,作者传递了一些“静态”值,但我们应该这样做吗?或者这总是可取的?
我的第二个问题是,为什么我必须重写超类的指定方法,而当我将初始化我的对象时,我永远不会调用它,除了在我自己指定的初始化程序中,我不会传递任何参数(例如;在 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];
}
还请帮助我纠正我的问题,因为我不确定我真正要问的是一个正确的问题。
谢谢。
【问题讨论】:
标签: objective-c design-patterns initialization