Нужно ли вызывать [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, но я не уверен, и это как бы указывает на правильное направление: суперкласс непрозрачен для вас, поэтому, если не задокументировано, что его реализация ничего не делает, вы всегда должны вызывать.

Другие вопросы по тегам