Деллок вызывается после viewDidUnload? - PullRequest
3 голосов
/ 11 февраля 2010

Небольшой вопрос, после viewDidUnload вызывается также dealloc? Я спрашиваю в отношении pickerData, я понял, что переменная будет освобождена, когда вызывается dealloc. Моя причина для того, чтобы спросить, состоит в том, что я заметил в одной книге, что автор устанавливает значение pickerData равным nil в viewDidUnload. Является ли это безопасным излишним, может быть, даже хорошей практикой, или нет сценария, когда один не был бы вызван без другого.

ИНТЕРФЕЙС:

@interface SingleViewController : UIViewController {
    NSArray *pickerData;
}
@property(nonatomic, retain) NSArray *pickerData;
@end

IMPLMENTATION:

-(void)viewDidUnload {
    [self setSinglePicker:nil];
    [self setPickerData:nil]; 
    [super viewDidUnload];
}

-(void)dealloc {
    NSLog(@"Here");
    [singlePicker release];
    [pickerData release];
    [super dealloc];
}
@end

1009 * Гэри *

1 Ответ

6 голосов
/ 11 февраля 2010

Нет, viewDidUnload: вызывается, когда освобождается представление UIViewController. dealloc: вызывается только тогда, когда счетчик ссылок UIViewController обнуляется. Авторский кодекс - хорошая практика.

Автор использует синтезированные методы, чтобы установить для ivars значение nil, что означает, что этим ivars отправляются сообщения о выпуске. viewDidUnload: где вы должны освободить любые объекты или память, которые вы можете легко восстановить. По сути, автор говорит: «Мне больше не нужны ссылки на эти вещи, уменьшите счетчик сохраняемых данных и, надеюсь, это освободит память. Я воссоздаю это позже, если необходимо, в viewDidLoad:.»

Установка ivars на nil не будет иметь последствий, если dealloc вызывается, поскольку сообщения для nil обрабатываются средой выполнения Objective C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...