Ссылка на метод в текущем объекте - PullRequest
4 голосов
/ 27 мая 2009

Как вы ссылаетесь на метод в текущем объекте в Objective-C? Есть ли что-то похожее на Java, ключевое слово this ?

Вот какой-то фальшивый код для уточнения:

@implementation FooBard
- (void) foo {
   i = 1
   m = [this bar: i];
}

- (int) bar: int j {
   k = j - 1;
   return (k);
}
@end

В Java я бы просто сделал this.bar () и покончил бы с этим.

Ответы [ 2 ]

4 голосов
/ 27 мая 2009
m = [self bar:i];
2 голосов
/ 28 мая 2009

Все методы Objective C получают неявный параметр с именем self, который является переменной стека типа id, которая указывает на текущий экземпляр. Фактически, любая функция C может использоваться как метод Objective-C, если ее первые два параметра имеют тип id и SEL (см. Ниже).

self не является зарезервированным ключевым словом в Objective-C, как this в Java. Вы можете, например, переназначить self в методе. Это стандартный шаблон в init методах:

-(id)init {
  if( (self = [super init]) ) {
    // do initialization here
  }

  return self;
}

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

Вы можете использовать self как и любую другую переменную типа id: [self bar:i] в приведенном вами примере.

Для полноты картины все методы Objective C также получают параметр implicity с именем _cmd, который также является селектором (тип SEL) вызываемого метода. См. Objetive-C Runtime Reference для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...