ARC выпускает ViewController преждевременно - PullRequest
1 голос
/ 22 февраля 2012

Я новичок в ARC и играю с ним меньше недели. То, что я пытаюсь сделать, очень просто. У меня есть контроллер представления, который отображает кнопку. Когда я нажимаю кнопку, необходимо вызвать соответствующий селектор. Однако при использовании ARC приложение завершало работу с сообщением EXC_BAD_ACCESS. Ниже приведен код из моего MainViewController

- (void)loadView
{
    [super loadView];
    UIButton *testButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    [testButton setFrame:CGRectMake(80,50,160,50)];
    [testButton setTitle:@"Click Me" forState:UIControlStateNormal];
    [testButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:testButton];
}

-(void)buttonClicked:(id)sender
{
    NSLog(@"Button Clicked");
}

Я включил Zombie Objects и смог найти следующее сообщение в журналах отладки

2012-02-21 22:46:00.911 test[2601:f803] *** -[MainViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x6b4bba0

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

Заранее спасибо

Ответы [ 2 ]

10 голосов
/ 22 февраля 2012

Пожалуйста, используйте сильный ключ

@property (strong, nonatomic) MainViewController *mvc;
0 голосов
/ 14 января 2013

В случае, если у кого-то есть похожие симптомы, но он использует раскадровки и сегменты, как в моем случае - мне помог этот ответ:

Сообщение IOS 5, отправленное освобожденному экземпляру по команде alloc

Исправлено было установить делегат моего MKMapView равным nil во время viewWillDisappear. Потребовалось много времени, чтобы найти это решение!

...