Поддерживает ли pushViewController контроллер?
Я пытаюсь выяснить, сохраняет ли pushViewController контроллер, в настоящее время у меня есть следующий код (который работает)...
ColorController *colorController = [[ColorController alloc] initWithNibName:nibColor bundle:nil];
[[self navigationController] pushViewController:colorController animated:YES];
[colorController release];
но я рассматриваю удаление релиза и добавление авторекламы...
ColorController *colorController = [[[ColorController alloc] initWithNibName:nibColor bundle:nil] autorelease];
[[self navigationController] pushViewController:colorController animated:YES];
Очень ценится
Гэри
Ответы
Ответ 1
Это ничего не делает...
ColorController *colorController = [[ColorController alloc] initWithNibName:nibColor bundle:nil];
[[[self navigationController] pushViewController:colorController animated:YES] autorelease];
Вы автоматически сохраняете возвращаемое значение pushViewController: анимированный:, который недействителен.
Ваш первый фрагмент действителен и корректен. pushViewController: действительно сохраняет контроллер, который нажат.
Изменить: в обновленном коде разница между двумя образцами невелика. Оба сохраняют надлежащее количество задержек. Однако лучше избегать использования autoRelease, если это необходимо (особенно в области, чувствительной к памяти, например iPhone). Это помогает вашему приложению поддерживать более предсказуемый и управляемый объем памяти.
Ответ 2
Да, контроллер вида сохраняется.
Существует не большая разница между двумя блоками кода, которые вы опубликовали (по крайней мере, на той версии, которую я смотрю - другие люди, вероятно, видели более раннюю версию с неуместным вызовом autorelease
). Вы можете использовать один из них. Это вопрос стиля.
Ответ 3
Конечно. Каждый раз, когда вы передаете один объект другому объекту SDK, он будет сохранен. Хотя эта вторая строка не автореализует то, что вы думаете. Обычно вы хотите, чтобы autorelease
в той же строке, что и init
для большей ясности.
ColorController *colorController = [[[ColorController alloc] initWithNibName:nibColor bundle:nil] autorelease];
[[self navigationController] pushViewController:colorController animated:YES];
Ответ 4
Если вы хотите попробовать, вы должны попробовать это
id temp = [self.navigationController.viewControllers objectAtIndex:1];
[self.navigationController popToViewController:temp animated:YES];
вы будете перемещены к любому другому предыдущему ViewController, которые доступны в стеке.