Соглашение `[super viewDidLoad]`

Я вижу пример кода с [super viewDidLoad], который вызывается до вашей реализации и после вашей реализации.

Я знаю, что вы не всегда должны звонить супер (как видно из многих других обсуждений). Когда вы звоните, ожидается ли это до или после того, как вы закодируете?

Это может иметь последствия в зависимости от того, что делает реализация super. Хотя вам не нужно знать реализацию super, чтобы написать свою.

Конечно, это относится ко всем методам делегатов UIViewControllers (willAppear, didAppear и т. Д.)

Какие-нибудь мысли?

2 ответа

Решение

Мое эмпирическое правило таково: если вы делаете что-то, связанное с инициализацией, всегда сначала вызывайте метод суперкласса (если вы вообще собираетесь его вызывать). Это дает суперклассу возможность выполнить любую настройку, на которую вы можете положиться позже в своем методе. Если вы делаете что-то связанное с уничтожением, вызывайте метод суперкласса последним. Это гарантирует, что вы можете положиться на состояние объекта на протяжении всего выполнения вашего метода. Наконец, возьмите любой другой случай на индивидуальной основе. Например, если вы обрабатываете событие, вы, вероятно, хотите сначала иметь дело с событием и вызывать метод суперкласса только в том случае, если вы решили не обрабатывать событие или если вы каким-то образом изменили его и хотите передать его вместе с событием цепь.

Допустим, у вас есть 2 класса, родитель и ребенок. Ребенок наследует от Родителя. У них есть метод greet, который возвращает строку.

Вот как выглядит родительский метод:

Код:

-(NSString *)greet {
 return @"Hello";
}

Мы хотим, чтобы ребенок учился у своих родителей. Поэтому мы используем супер, чтобы сказать "приветствуй", как мама будет приветствовать, но с нашими собственными небольшими дополнениями.

Код: // Наследуется от Родителя

-(NSString *)greet {
NSString *parentGreeting = [super greet];
return [parentGreeting stringByAppendingString:@", Mommy"]
}

Итак, теперь Родитель приветствует "Привет", а Ребенок - "Привет, мамочка". Позже, если мы изменим приветствие родителя, чтобы оно возвращало просто "Привет", то это повлияет на оба класса, и у вас будут "Привет" и "Привет, мамочка".

super используется для вызова метода, определенного суперклассом. Он используется для доступа к методам, которые были переопределены подклассами, чтобы класс мог обернуть свой собственный код вокруг метода, который реализует его родительский класс. Это очень удобно, если вы вообще наследуете.

Другие вопросы по тегам