众所周知,工厂方法无法调用实例方法。为什么以下代码有效?
// .m file implementation DemoClass
// custom instance init method
- (instancetype)initWithDate:(NSDate *)date {
if (self = [super init]) {
self.lastTime = date;
}
return self;
}
// custom factory method
+ (instancetype)DemoClassWithDate:(NSDate *)date
//here calling instance method initWithDate:
return [[self alloc] initWithDate:date];
}
答案 0 :(得分:3)
[self alloc]将返回一个实例。 initWithDate只是一个实例方法。没有理由不允许类方法在实例上调用实例方法。
PS。我强烈建议你检查你的编译器设置,并告诉编译器如果' ='的结果会给你一个警告。用作布尔值。这将防止许多难以发现的错误。您必须将if更改为
if ((self = [super init]) != nil)
答案 1 :(得分:2)
因为它引用了新创建的实例:
return [[self alloc] initWithDate:date];
// ^^^^^^^^^^^^
// reference