В Apple <<a href="http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html" rel="nofollow"> Управление памятью > Документ, когда речь идет об аутлетах.
Там написано
в вашем классе контроллеров
Вы можете реализовать viewDidUnload для
вызовите ваши методы доступа, чтобы установить
розетки до нуля.
Я могу это понять, поскольку в этом случае вызов методов доступа для установки nil освободит объект, а указатель nil может предотвратить доступ к недопустимой точке, что может привести к сбою.
Но после этого он говорит:
Примечание. На iOS до версии 3.0
Метод viewDidUnload недоступен.
Вместо этого вы должны установить выходы на ноль
в setView:, как показано в этом
Пример:
- (void)setView:(UIView *)aView {
if (!aView) { // View is being set to nil.
// Set outlets to nil, e.g.
self.anOutlet = nil;
}
// Invoke super's implementation last.
[super setView:aView];
}
Кроме того, из-за детали
реализация сделки в
UIViewController, вы также должны установить
выходные переменные в ноль в dealloc:
- (void)dealloc {
// Release outlets and set outlet variables to nil.
[anOutlet release], anOutlet = nil;
[super dealloc];
}
1) Почему даже в dealloc нам нужно установить nil? (Я думаю, что dealloc - последний шаг жизненного цикла объекта, никто другой не может получить доступ к розетке через этот объект.)
2) Нужно ли нам устанавливать nil в iOS 3.0 или более поздней версии? (Я обнаружил, что автоматически генерируемый код Xcode не устанавливает для nil выходные переменные, а только освобождает их.)