IOS: настоящий выпуск контроллера - PullRequest
0 голосов
/ 20 января 2012

Я использую этот код, чтобы открыть viewcontroller

self.secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
[self presentModalViewController:self.secondViewController animated:YES];

[self.secondViewController release];

, но если я использую [self.secondViewController release];, когда я вызываю этот код во второй раз, он падает, потому что

[FirstViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x18a890

, если я неэто не так, все нормально, но в этой ситуации, когда я могу освободить свой второй контроллер?ты можешь мне помочь?

1 Ответ

0 голосов
/ 20 января 2012

Исходя из вашего кода (self.secondViewController), я понимаю, что вы объявили secondViewController как переменную в своем файле .h, а @synthesize сделали это в своем файле .m.Если это правильно, я бы предпочел сделать следующее:

if (self.secondViewController == nil)
    self.secondViewController = [[SecondViewController alloc] initWithNib:@"SecondViewController" bundle:nil];

[self presentModalViewController:self.secondViewController animated:YES];

, а в вашем методе - (void)dealloc я бы добавил [self.secondViewController release];, а в - (void)viewDidUnload я бы добавил [self setSecondViewController:nil];.

Приведенный выше код основан на предположении, что вы не используете ARC.Если вы используете ARC, я бы изменил свой код следующим образом:

// Do not declare secondViewController as a variable in your .h file
// Instead, in storyboard, give it an identifier, e.g. secondViewController
// and 

SecondViewController *svc = [self.storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
[self presentModalViewController:svc animated:YES];
svc = nil;
...