Обязательно ли устанавливать переменные outlets в nil в dealloc (даже после IOS 3.0)? - PullRequest
0 голосов
/ 14 апреля 2011

В 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 выходные переменные, а только освобождает их.)

1 Ответ

2 голосов
/ 14 апреля 2011

Нет, вам не нужно устанавливать свои выходы на ноль в dealloc.Просто убедитесь, что вы отпускаете их.

...