2011-07-17 2 views
1

Как отправить сообщение определенному суперклассу? Например:Супер определенного класса в Objective C

@interface A: NSObject; 

@interface B: A; 

@interface C: B; 

@implementation C 

- (id)init { 
    [super init]; 
} 

, где «супер» есть класс A, но не B

+4

Зачем вам это нужно? Это нарушает довольно фундаментальный аспект объектно-ориентированного наследования. –

+1

Почему бы и нет? Я хочу переопределить метод супер-суперкласса, но все остальные методы - из суперкласса. И я мог бы сделать это на C++. – Antigluk

+1

У меня есть большое дерево классов, и я хочу уменьшить реализацию одного метода, но не касаюсь реализации этого метода в супер-супер-классе. – Antigluk

ответ

7

Вы всегда можете получить IMP для выбора любого класса, и вызвать его вручную.

@implementation C 
- (id)init 
{ 
    IMP a_init = [A instanceMethodForSelector:_cmd]; 
    return a_init(self, _cmd); 
} 
@end 

Вы можете также одна линия его, return [A instanceMethodForSelector:_cmd](self, _cmd);

Для записи _cmd предоставляется вам по Objective-C, и является SEL текущего метода.

+0

Это очень приятно! –

+0

Спасибо, объектив c действительно имеет хороший RTTI. – Antigluk

Смежные вопросы