我正在尝试向UIBezierPath
添加属性。所以我创建了一个名为JWBezierPath
的子类。我想让所有的类方法缩写也使用数字参数,所以我创建了方法:
+ (JWBezierPath *)bezierPathWithColor:(UIColor *)color {
JWBezierPath *path = [self bezierPath];
[path setColor:color];
return path;
}
问题是,[self bezierPath]
确实返回UIBezierPath
的实例而不是我的子类。我也尝试使用具体的类:[JWBezierPath bezierPath]
我该如何解决这个问题?
答案 0 :(得分:1)
bezierPath
定义为:
+ (UIBezierPath *)bezierPath
所以你可能想要使用:
JWBezierPath *path = [[self alloc] init];
代替。
答案 1 :(得分:1)
如果你没有在你的类中实现+bezierPath
方法,那么将调用超类实现来创建UIBezierPath的实例,而不是JWBezierPath。
理论上,即使不覆盖这些方法,基类中的工厂方法也可以创建实例,例如:考虑BaseClass中工厂方法的2个选项:
// Will create instance of child class even if method won't be overriden
+ (instancetype) someObject {
return [self new];
}
VS
// Will always create instance of base class
+ (BaseClass*) someObject {
return [BaseClass new];
}
但是考虑到+bezierPath
声明(+(UIBezierPath *)bezierPath
)和你的证据,UIBezierPath类没有以这种方式实现,你必须在你的cub类中实现+bezierPath
方法