Поэтому я изменил пример Apple PageControl для динамической загрузки различных контроллеров навигации (вместе с их корневыми контроллерами представления) в представление прокрутки. Я также добавил технику, которая пытается разгрузить контроллер навигации, когда он больше не нужен. Я пробыл в ObjC чуть больше месяца, поэтому не уверен, правильно ли я выполняю разгрузку. Пожалуйста, смотрите мой код ниже, а затем мои вопросы.
Сначала я создаю изменяемый массив и заполняю его нулями, как это делает Apple:
// Create dummy array for viewControllers array, fill it with nulls, and assign to viewControllers
NSMutableArray *array = [[NSMutableArray alloc] init];
for (unsigned i = 0; i <= kNumberOfPages; i++)
{
[array addObject:[NSNull null]];
}
self.viewControllers = array;
[array release];
... Позже я заполняю массив объектами UINavigationController, вот так (это всего лишь частичный код, извините за пропущенные части ... основная идея в том, что я выделяю пару вещей, назначаю их и затем отпустите):
id controller = [[classForViewController alloc] initWithNibName:NSStringFromClass(classForViewController) bundle:nil];
navController = [[UINavigationController alloc] initWithRootViewController:controller];
[controller release];
[self.viewControllers replaceObjectAtIndex:page withObject:navController];
[navController release];
... Наконец, если страницу больше не нужно загружать, я делаю это:
[self.viewControllers replaceObjectAtIndex:i withObject:[NSNull null]];
Вопросы:
Насколько я понимаю, после замены контроллера навигации в моем массиве viewControllers на ноль массив освобождает контроллер навигации. Таким образом, счетчик удержания контроллера навигации достигает нуля, и он больше не занимает память. Это правильно?
А как насчет корневого контроллера вида внутри контроллера навигации? Нужно ли что-то с ним делать, или он освобождается автоматически, когда счетчик удержания контроллера навигации достигает нуля?
Спасибо!