Дочерний класс вызывает метод родительского класса - PullRequest
2 голосов
/ 29 мая 2011

В target-C я хочу вызвать дочерний класс или вызвать метод родителя. Как в родительском объекте выделен дочерний элемент, так и дочерний элемент выполняет то, что вызывает метод родительского элемента. вот так:

//in the parent class
childObject *newChild = [[childClass alloc] init];
[newChild doStuff];

//in the child class
-(void)doStuff {
    if (something happened) {
        [parent respond];
    }
}

Как я могу это сделать? (если бы вы могли подробно объяснить, я был бы признателен)

Ответы [ 2 ]

7 голосов
/ 29 мая 2011

Для этого можно использовать делегат: пусть childClass определит протокол делегата и свойство делегата, соответствующее этому протоколу. Тогда ваш пример изменится на что-то вроде этого:

// in the parent class
childObject *newChild = [[childClass alloc] init];
newChild.delegate = self;
[newChild doStuff];

// in the child class
-(void)doStuff {
    if (something happened) {
        [self.delegate respond];
    }
}

Вот пример того, как объявить и использовать протокол делегата здесь: Как настроить простой делегат для связи между двумя контроллерами представления?

3 голосов
/ 29 мая 2011

Не так много, чтобы объяснить.

Для использования в этой ситуации у вас есть ключевое слово super, которое очень похоже на self, за исключением того, что оно относится к тому, что self было, если бы оно было членом своего непосредственного суперкласса:

// in the child class
- (void)doStuff {
  if (something happened) {
    [super respond];
  }
}
...