Что делает [super viewWillAppear] и когда это требуется? - PullRequest
28 голосов
/ 28 июля 2010
-(void)viewWillAppear:(BOOL)animated{
//something here
[super viewWillAppear];
}

Всегда ли требуется [super viewWillAppear];? Если нет, то когда и почему вы его используете?

Ответы [ 4 ]

51 голосов
/ 28 июля 2010

Прежде всего, правильная котельная плита должна быть:

-(void)viewWillAppear:(BOOL)animated{
   [super viewWillAppear:animated];
   //something here
}

Другими словами, сначала позвоните super , а затем сделайте свое дело. И вы должны передать параметр animated в super.

Обычно вы хотите сначала вызвать реализацию суперкласса в любом методе. На многих языках это требуется. В Objective-C это не так, но вы можете легко столкнуться с неприятностями, если не поставите это во главу угла своего метода. (Тем не менее, я иногда нарушаю эту схему.)

Требуется ли для super's реализация ? В случае этого конкретного метода вы можете получить неожиданное поведение, если не будете вызывать его (особенно, если вы, например, указали в подклассе UINavigationController). Таким образом, ответ нет не в техническом смысле, но вы, вероятно, всегда должны это делать.

Однако во многих других методах могут быть веские причины не вызывать super.

8 голосов
/ 27 ноября 2015

Вызов метода super обеспечивает возможность выполнения кода в родительском классе.

По вашему вопросу в соответствии с Документ Apple

enter image description here

Итак, да, этот метод необходим.

3 голосов
/ 07 декабря 2011

По моему опыту, вызов [super viewWillAppear] в первой строке при вызове reloadData после этого делает невозможным получение ранее выбранной строки при возврате из подробного представления.Когда [super viewWillAppear] является последним предложением, вы можете получить выбранную строку и показать ранее выбранную подсказку строки.Это происходит только при использовании [tableView reloadData] внутри viewWillAppear.

2 голосов
/ 21 октября 2014

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

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

Код:

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

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

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

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

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

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

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