-(void)viewWillAppear:(BOOL)animated{
//something here
[super viewWillAppear];
}
Требуется ли [super viewWillAppear];
? Если не когда и почему вы его используете?
-(void)viewWillAppear:(BOOL)animated{
//something here
[super viewWillAppear];
}
Требуется ли [super viewWillAppear];
? Если не когда и почему вы его используете?
Прежде всего, правильная плита котла должна быть:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//something here
}
Иными словами, сначала вызовите super
, затем сделайте свою собственную вещь. И вы должны передать параметр animated
в super
.
Обычно вы хотите сначала реализовать реализацию суперкласса в любом методе. На многих языках это необходимо. В Objective-C это не так, но вы можете легко столкнуться с проблемами, если не ставите его в верхней части своего метода. (Тем не менее, я иногда нарушаю этот шаблон.)
Вызывается super's
реализация требуется? В случае этого конкретного метода вы можете получить непредвиденное поведение, если вы его не вызываете (особенно если вы, например, подклассифицировали UINavigationController
). Поэтому ответ нет не в техническом смысле, но вы, вероятно, всегда должны это делать.
Однако во многих других методах могут быть веские причины не вызывать super
.
Вызов метода super
обеспечивает возможность выполнения кода в родительском классе.
Относительно вашего вопроса в соответствии с Apple doc
Итак, да, этот метод требуется.
По моему опыту, вызов [super viewWillAppear]
в первой строке при вызове reloadData
после этого делает невозможным извлечение ранее выбранной строки при возврате из подробного представления. Когда [super viewWillAppear]
- последнее предложение, вы можете получить выбранную строку и показать ранее выбранную подсказку строки. Это происходит только при использовании [tableView reloadData]
внутри viewWillAppear
.
Допустим, у вас есть 2 класса, родитель и ребенок. Ребенок наследует от родителя. У них есть метод greet, который возвращает строку.
Вот как выглядит родительский метод:
код:
-(NSString *)greet {
return @"Hello";
}
Мы хотим, чтобы ребенок учился у своих родителей. Поэтому мы используем супер, чтобы приветствовать, как мама будет приветствовать, но и с нашими собственными небольшими дополнениями.
код: // Унаследовано от родителя
-(NSString *)greet {
NSString *parentGreeting = [super greet];
return [parentGreeting stringByAppendingString:@", Mommy"]
}
Итак, теперь Parent приветствует "Hello", а Child приветствует "Hello, Mommy". Позже, если мы изменим родительский привет, чтобы вернуть только "Привет", тогда оба класса будут затронуты, и у вас будут "Привет" и "Привет, мама".
super используется для вызова метода, определенного суперклассом. Он используется для доступа к методам, которые были переопределены подклассами, чтобы класс мог обернуть свой собственный код вокруг метода, который реализует его родительский класс. Это очень удобно, если вы вообще ничего не наследуете.