Что делает [super viewWillAppear], и когда это требуется?

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

Относительно вашего вопроса в соответствии с Apple doc

введите описание изображения здесь

Итак, да, этот метод требуется.

Ответ 3

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

Ответ 4

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

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

код:

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

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

код: // Унаследовано от родителя

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

Итак, теперь Parent приветствует "Hello", а Child приветствует "Hello, Mommy". Позже, если мы изменим родительский привет, чтобы вернуть только "Привет", тогда оба класса будут затронуты, и у вас будут "Привет" и "Привет, мама".

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