Objective-C: метод вызова подкласса

Скажем, у меня есть класс 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?


person Neil    schedule 27.07.2011    source источник
comment
А почему вы думаете, что в методах класса нет себя?   -  person bealex    schedule 27.07.2011
comment
Я заменил слово «статические методы» на методы класса. Методы класса в Objective-C - это virtual в смысле C ++, а не _2 _... Я думаю, что этот выбор терминологии в C ++ был неудачным.   -  person Yuji    schedule 27.07.2011


Ответы (2)


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

UIImage *img = [self backgroundImage];
person Community    schedule 27.07.2011
comment
Спасибо. Не осознавал, что отнесся к классу. - person Neil; 27.07.2011

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

person highlycaffeinated    schedule 27.07.2011