Простой вопрос наследования в Objective-C - PullRequest
2 голосов
/ 30 марта 2011

У меня есть два класса Objective-C, и один получен из другого как

@interface DerivedClass : BaseClass
{
}

Секция кода ниже принадлежит BaseClass:

- (id)init {
    if (self = [super init]) {
       [self configure]; 
    }   
    return self;
}

- (void) configure{} //this is an empty method

А секция кода принадлежит DerivedClass:

-(void) configure{
    NSLog(@"derived configure called");
}

Теперь, когда я говорю derivedInstance = [DerivedClass new]; и наблюдаю за стеком вызовов, я вижу, что метод configure моего производного класса вызывается в строке [self configure] метода init базы.

Я новичок в Objective-C, и меня смущает, как метод производного класса вызывается из метода базового класса. Ключевое слово "self" объясняется тем же, что и ключевое слово "this" некоторых языков, но я думаю, что это объяснение не совсем корректно, верно?

1 Ответ

6 голосов
/ 30 марта 2011

[self someMessage] отправит сообщение «someMessage» текущему объекту, который является экземпляром DerivedClass.

Отправка сообщения выполняется динамически во время выполнения, поэтому он будет вести себя как и любой другойобъект в то время .

...