Супер определенного класса в Objective C - PullRequest
1 голос
/ 17 июля 2011

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

@interface A: NSObject;

@interface B: A;

@interface C: B;

@implementation C

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

, где "супер" - это класс A, но не B

1 Ответ

7 голосов
/ 17 июля 2011

Вы всегда можете получить 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 текущего метода.

...