Поддерживает ли 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, которые доступны в стеке.