Objective-C: вызов метода класса подкласса - PullRequest
4 голосов
/ 27 июля 2011

Допустим, у меня есть класс Objective C с именем MyBaseClass и подкласс с именем MySubclassedClass.

MyBaseClass имеет два метода класса:

+ (UIColor *)backgroundColor;
+ (UIImage *)backgroundImage;

Метод backgroundColor вызывает backgroundImage. Если бы он был ограничен MyBaseClass, мой метод backgroundColor выглядел бы как

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

Но я хочу иметь возможность подкласса MyBaseClass в MySubclassedClass. backgroundColor не изменится и всегда вызовет метод backgroundImage родителя. В этом сценарии backgroundImage будет переопределено в каждом подклассе.

Если бы 1backgroundColor1 был методом экземпляра, я бы просто использовал

UIImage *img = [[self class] backgroundImage];

но нет «я», которое я могу использовать, когда это статический метод.

Есть ли кто-нибудь, кого я могу достичь в Objective-C?

Ответы [ 2 ]

12 голосов
/ 27 июля 2011

Когда вы отправляете сообщение методу класса из другого метода класса, self является классом. Поэтому вы можете сделать следующее:

UIImage *img = [self backgroundImage];
4 голосов
/ 27 июля 2011

Вы можете использовать self внутри метода класса (статического).В этом случае self относится к объекту класса.

...