[英]Subclassing Objective C Class methods
我有一个关于Subclassing和Class方法的问题。
我有一个基类MyBaseClass
,它有一个方便类方法
+ (id)giveMeAClassUsing:(NSString *)someParameter;
MyBaseClass
不是单身人士。
现在,我希望创建一个MyBaseClass
的子类,让我们称之为MyChildClass
。 我希望在MyChildClass
上也有相同的类方法。 另外,我还希望在我这样做时在MyChildClass
上初始化一个实例变量。
会做这样的事情:
+ (id)giveMeAClassUsing:(NSString *)someParameter {
MyChildClass *anInstance = [super giveMeAClassUsing:someParameter];
anInstance.instanceVariable = [[UIImageView alloc] initWithFrame:someFrame];
return anInstance;
}
有效吗?
感谢您的所有帮助(提前),以及解决我的困惑和澄清一些概念!
干杯!
那会很好。
可能更好的方法是以不需要覆盖它的方式定义您的便利构造函数:
+ (id)myClassWithString: (NSString *)string {
return [[[self alloc] initWithString:string] autorelease];
}
无论您调用哪个超类或其任何子类,这都会做正确的事情。
然后只更改子类中的initWithString:
方法来处理初始化:
- (id)initWithString: (NSString *)string {
return [self initWithString:string andImageView:[[[UIImageView alloc] initWithFrame:someFrame] autorelease]] ;
}
绝对是有效的。
一个注意事项是在超类中,使用self
引用类本身,而不是按名称引用超类。
这不好:
// MySuperClass // BAD :(
+ (id)giveMeAClassUsing:(NSString *)someParameter {
return [[[MySuperClass alloc] initWithParam:someParameter] autorelease];
}
但这很好!
// MySuperClass // GOOD! :D
+ (id)giveMeAClassUsing:(NSString *)someParameter {
return [[[self alloc] initWithParam:someParameter] autorelease];
}
否则当你进行子类化,然后调用super时,你实际上并没有初始化正确的类。 使用self
允许实例化的类在不覆盖类方法的情况下变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.