Ios 在Objective中重写类方法
考虑到以下情况:Ios 在Objective中重写类方法,ios,objective-c,Ios,Objective C,考虑到以下情况: @interface Superclass : NSObject ... @end @interface Superclass + (void)methodToOverride { NSLog(@"This method should be overridden by subclass!"); } + (void)callMethodToOverride { [self methodToOverride]; } @end @interface SubC
@interface Superclass : NSObject
...
@end
@interface Superclass
+ (void)methodToOverride
{
NSLog(@"This method should be overridden by subclass!");
}
+ (void)callMethodToOverride
{
[self methodToOverride];
}
@end
@interface SubClass : SuperClass
...
@end
@implementation SubClass
+ (void)methodToOverride
{
NSLog(@"I'm overriding this method!");
}
@end
现在,打电话的时候
[Subclass callMethodToOverride];
我得到“这个方法应该被子类覆盖!”
。有没有可能得到我正在重写这个方法代码>,或者这在ObjC的静态方法中是不可能的
干杯 我时不时地使用这个范例,它对我很有用。在我的实现中,我引用的是[self class]
,而不是self
。也许这就是你丢失的钥匙
+ (void)callMethodToOverride
{
[[self class] methodToOverride];
NSLog(@"This is the class that I just used: %@", NSStringFromClass(self));
}
听起来这可能只是一个输入错误,你没有使用你认为自己是的类。Objective-C中没有静态方法。你问题中的方法是类方法(与实例方法相反)。在类方法中,self
是类,因此self
和[self-class]
是等效的。我不反对;这不应该有什么区别。我正在分享我所知道的关于我使用的代码的真实情况。谢谢,它成功了!我有点叫[Superclass methodToOverride],而不是[self methodToOverride]!问题已解决:)