Соглашение `[super viewDidLoad]` - PullRequest
60 голосов
/ 10 мая 2009

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

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

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

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

Есть мысли?

Ответы [ 2 ]

97 голосов
/ 10 мая 2009

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

0 голосов
/ 09 марта 2015

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

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

Код:

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

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

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

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

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

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

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