PushViewController сохраняет контроллер? - PullRequest
11 голосов
/ 24 августа 2010

Я пытаюсь выяснить, сохраняет ли 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];

Очень ценится

Gary

Ответы [ 4 ]

11 голосов
/ 24 августа 2010

Это ничего не делает ...

ColorController *colorController = [[ColorController alloc] initWithNibName:nibColor bundle:nil];
[[[self navigationController] pushViewController:colorController animated:YES] autorelease];

Вы автоматически высвобождаете возвращаемое значение pushViewController: animated :, void.

Ваш первый фрагмент действителен и корректен.pushViewController: действительно сохраняет контроллер, который выдвигается.

Редактировать: В вашем обновленном коде есть небольшая разница между этими двумя примерами.Оба поддерживают правильное количество сохранений.Тем не менее, рекомендуется избегать использования автоматического восстановления без необходимости (особенно в чувствительной к памяти области, такой как iPhone).Это помогает вашему приложению поддерживать более предсказуемый и управляемый объем памяти.

4 голосов
/ 24 августа 2010

Да, контроллер вида сохраняется.

Нет большой разницы между двумя блоками кода, которые вы разместили (по крайней мере, версию, которую я смотрю - другие люди, вероятно, видели более раннюю версию с неуместным вызовом autorelease). Вы можете использовать любой из них. Это вопрос стиля.

0 голосов
/ 30 июня 2011

Если хотите попробовать, попробуйте это

id temp = [self.navigationController.viewControllers objectAtIndex:1];
[self.navigationController popToViewController:temp animated:YES];

, и вы перейдете к любому другому предыдущему ViewController, доступному в стеке.

0 голосов
/ 24 августа 2010

Это точно так. Каждый раз, когда вы передаете один объект другому объекту SDK, как этот, он будет сохранен. Хотя эта вторая строка не выпускает автоматически то, что вы думаете. Обычно вы хотите, чтобы autorelease находился в одной строке с init для ясности.

ColorController *colorController = [[[ColorController alloc] initWithNibName:nibColor bundle:nil] autorelease];
[[self navigationController] pushViewController:colorController animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...