Подтвердить что ты не робот

UINavigationController: Когда отображается нажатый режим получения сообщения Dealloc?

Я бы ожидал, что после того, как я нажму контроллер представления, мне нужно освободить свое владение над контроллером представления, как я сделал ниже.

CustomViewController *nextViewController = [[CustomViewController alloc] initWithNibName:@"CustomView" bundle:nil];
[[self navigationController] pushViewController:nextViewController animated:YES];
[nextViewController release];

После этого я предполагаю, что контроллер навигации имеет право собственности на этот объект и выпустит его, когда будет выполнен, который затем вызовет dealloc на моем customViewController. Я ожидаю, что это произойдет, когда я коснусь кнопки "Назад" на панели навигации, и представление больше не отображается. Однако этого не происходит. Я добавил NSLog (@ "CustomViewController действительно получил dealloc" ) в метод dealloc CustomViewController, но он никогда не печатается. Это нормальное поведение?

Контроллер навигации просто делает что-то вроде сохранения этого объекта в случае, если он ему нужен в какой-то момент? Сможет ли это избавиться от него, когда память начнет заканчиваться? Я попытался имитировать предупреждение о низкой памяти, но ничего не происходит. У меня есть чувство, что ответ на этот вопрос будет состоять в том, что я просто не должен так беспокоиться и следовать стандартной процедуре сохранения/выпуска/авторекламы. Тем не менее, кто-то еще углубился в это немного дальше и обнаружил абсолютный ответ?

4b9b3361

Ответ 1

"Контроллер навигации просто делает что-то вроде сохранения этого объекта в случае, если он ему нужен в какой-то момент?"

Угу. Это именно то, что он делает. Он отправит вам сообщения viewDidLoad и viewDidUnload. И это то место, где вы должны выделять и освобождать ресурсы, которые использует ваш диспетчер view.

Обратите внимание, что viewDidUnload будет вызываться только тогда, когда система считает, что ему необходимо освободить память.

Если вам нужно более непосредственное управление, когда вещи загружаются и освобождаются, лучшим местом может быть viewWillAppear: и viewDidDisappear:.

Мои методы alloc/init для viewcontrollers обычно довольно пусты или даже там.