Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Objective中重写类方法_Ios_Objective C - Fatal编程技术网

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]!问题已解决:)