когда выделять и инициализировать контроллер представления - PullRequest
0 голосов
/ 07 сентября 2010

недавно я присоединился к двум проектам XCode вместе.Чтобы заставить это работать, мне пришлось выделить и инициализировать мой контроллер вида.

self.myViewController = [[MyViewController alloc] init];

Но почему?В другом проекте у меня такой же код.Единственное отличие - это иерархия разных взглядов.Я добавил новый вид сверху (начало).Таким образом, вызывающий View Controller больше не является первым представлением в стеке.

Я помещаю свое представление таким образом в стек:

[[self navigationController] pushViewController:myViewController animated:YES];

В своих NIB я добавилПросмотреть объект Controller с IB и подключить розетки.

И у меня тоже есть вопрос управления памяти : если у меня есть такое свойство, как myViewController, нужно ли его освобождать?«Нормальный» выпуск выполняется в методе dealloc.Но нужно ли использовать дополнительный релиз из-за alloc?Я так не думаю, но все равно спрашиваю.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2010

Мне нужно было бы увидеть больше кода, чтобы ответить, почему вам пришлось выделить свой контроллер представления, но я бы сказал, что вы всегда выделяете их вручную (по крайней мере, по моему опыту).вопрос управления: если ваше свойство объявлено как retain свойство (@property(retain) UIViewController *myViewController), вы действительно теряете память, так как число сохранений после alloc будет равно 1, а после сохранения, выполненного вашим средством доступа, будет 2. Следовательноесли вы выпустите его только один раз, вы получите утечку.

Обычно я делаю это вместо:

self.myViewController = [[[MyViewController alloc] init] autorelease];
0 голосов
/ 07 февраля 2013

Есть еще один вариант:

(IBAction)loginButton:(UIButton *)sender {
    NSLog(@"pressed login");
    ICMasterViewController *controller = [[self storyboard] instantiateViewControllerWithIdentifier:@"mainnav"];
    [self presentViewController:controller animated:YES completion:nil];
}

На вашей раскадровке вы должны иметь UIViewController с именем mainnav

0 голосов
/ 07 сентября 2010

Я выяснил это: в IB я должен был установить имя пера на моем объекте контроллера представления. Таким образом, выделение и инициализация выполняются IB?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...