Objective-C:子类的调用类方法

Nei*_*eil 4 subclass objective-c class-method superclass

假设我有一个名为MyBaseClass的Objective-C类和一个名为MySubclassedClass的子类.

MyBaseClass有两个类方法:

+ (UIColor *)backgroundColor;
+ (UIImage *)backgroundImage;
Run Code Online (Sandbox Code Playgroud)

backgroundColor方法调用backgroundImage.如果它被限制在MyBaseClass中,我的backgroundColor方法看起来就像

+ (UIColor *)backgroundColor {
     UIImage *img = [MyBaseClass backgroundImage];
     // irrelevant
     return color;
}
Run Code Online (Sandbox Code Playgroud)

但我希望能够将MyBaseClass子类化为MySubclassedClass.backgroundColor不会改变,总是调用父backgroundImage方法.在这种情况下,backgroundImage将在每个子类中重写.

如果1backgroundColor1是一个实例方法,我只会使用

UIImage *img = [[self class] backgroundImage];
Run Code Online (Sandbox Code Playgroud)

但是,当它是静态方法时,我没有"自我"可以使用.

我可以在Objective-C中实现这一目标吗?

小智 12

当您从另一个类方法向类方法发送消息时,self就是该类.因此,您可以执行以下操作:

UIImage *img = [self backgroundImage];
Run Code Online (Sandbox Code Playgroud)