Как правильно использовать ARC при наличии viewcontroller? - PullRequest
0 голосов
/ 07 февраля 2012

Каждый раз, когда я представляю свой новый viewcontroller (как свойство в Presenter vc), как показано ниже:

if(self.viewController) [self.viewController release];
self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

, поэтому я всегда гарантирую получить новый экземпляр объекта (если объект уже существует).

Но теперь я использую ARC, и у меня нет идей, как отправить сообщение об освобождении моего объекта (потому что он не работает с ARC)

Можете ли вы помочь мне с этими проблемами?

PS: Каждый раз, когда я представляю gameVC, мне нужен новый экземпляр объекта.

Спасибо всем!

Ответы [ 4 ]

2 голосов
/ 07 февраля 2012
self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

приведенный выше код всегда будет представлять новый vc, а компилятор Apple позаботится о выпуске.

Но если вы думаете, что вышеописанное имеет некоторую проблему (что является мифом), тогда вы можете сделатьтакже как это

self.viewController = nil;
self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];
1 голос
/ 07 февраля 2012

Компилятор выдает инструкцию по выпуску.Вы должны использовать только этот код, и он должен работать ОК:

self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];
0 голосов
/ 07 февраля 2012

Вы не должны держать указатель на вашем контроллере представления.Я уверен, что ваш код должен выглядеть так:

ViewController *viewController = [[ViewController alloc] init];
[self presentModalViewController:viewController animated:YES];
0 голосов
/ 07 февраля 2012
self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

- правильный путь.

Однако этот код работает, даже если вы используете ручной подсчет ссылок, предполагая, что viewController является свойством self с retain илиstrong флаг.Когда вы изменяете значение свойства, предыдущее значение свойства освобождается, поэтому вам не нужно освобождать его самостоятельно.

...