Нужно ли вызывать [super viewDidUnload]?
Я видел несколько примеров Apple, которые вызывают [super viewDidUnload];
а некоторые нет. Я прочитал статью (несколько месяцев назад, поэтому я не помню URL), в которой говорилось, что звонит [super viewDidUnload];
было ненужным, но это не объясняло того.
Есть ли определенная причина, почему или почему бы не сказать супер, что viewDidUnload
?
И, (если это должно быть сделано) я вызываю супер, прежде чем установить все мои свойства в nil
, после или это имеет значение?
- (void)viewDidUnload {
// Is this necessary?
// [super viewDidUnload];
self.tableDataSource = nil;
self.titleLabel = nil;
// Is it better to call super before or after nil'ing properties?
// [super viewDidUnload];
}
Спасибо!
2 ответа
1- Есть ли определенная причина, почему или почему бы не сказать супер, что viewDidUnload?
Честно говоря, я не знаю последствий, чтобы не называть это. Вы можете попытаться не вызывать его, и все будет работать гладко, но представьте, что Apple добавляет какой-то важный фрагмент кода, который будет работать, когда [super viewDidUnload]
называется, что теперь будет? Вероятно, случатся плохие вещи, и вы потратите драгоценное время, пытаясь решить свою проблему. Мое правило: при переопределении звони супер.
2 - Я вызываю super до установки всех моих свойств в nil, после или это имеет значение?
Это важно, я наблюдал, как плохие вещи случаются, когда я звонил [super dealloc]
прежде чем выпустить мои объекты. Точно так же, как я видел, что мой интерфейс медленный, потому что я делал свои вычисления раньше [super viewDidLoad]
, Это всегда зависит от того, чего вы хотите достичь.
Итог, что я делаю в своих проектах для viewDidUnload
является:
// освободить мои взгляды
[super viewDidUnload];
Что касается iOS6:
viewDidUnload
как dealloc
тем, что вы "закрываете" свой объект - вы освобождаете память и переводите ее в (полу) неактивное состояние.
Рекомендуемый образец в Какао должен сделать [super dealloc]
в конце вашего подкласса dealloc
потому что вам нужно убедиться, что все, что вы добавили в класс, может быть освобождено до того, как ваш экземпляр будет признан недействительным. Та же идея, хотя это, вероятно, не так важно, viewDidUnload
,
В общем, при создании пусть сначала работает суперкласс. Разрушая, пусть работает в последнюю очередь.
Вам не нужно отправлять [super deconstructionMethod]
если реализация суперкласса ничего не делает. Я думаю, что это так для viewDidUnload
, но я не уверен, и это как бы указывает на правильное направление: суперкласс непрозрачен для вас, поэтому, если не задокументировано, что его реализация ничего не делает, вы всегда должны вызывать.