Я следую за this answer, чтобы отслеживать свое приложение для EXC_BAD_ACCESS. Да, у меня есть объект зомби. Когда я пытаюсь выяснить, какая строка моего кода ошибочна, я обнаружил, что все ответственные библиотеки являются Foundation.Сообщение Objective-C было отправлено на освобожденный объект «NSThread» (зомби) по адресу:
Когда я пытаюсь сделать это:
При двойном щелчке на любом сохранить/релиз, инструменты покажет вам строку кода, где это было выполнено.
Он всегда принимает меня к некоторому коду с ассемблером.
[
Я не знаю, как отследить мою ошибку, как это ...
Обновление в соответствии с ответом Elike.
Ошибка произошла, когда я обновляю название кнопки. Я использую таймер для обновления названия кнопки в секунду. Вы можете нажать кнопку, чтобы начать/остановить ее. И я использую dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_auto_duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{});
для автоматического запуска метода 300 раз (ошибка происходит случайным образом в течение 300 раз).
я называю Таймер, как этот _startcounttimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(StartCountTimerMethod) userInfo:nil repeats:YES];
- (void)StartCountTimerMethod
{
_startcountbtnsec++;
NSString *secstring = [NSString stringWithFormat:@"%d", _startcountbtnsec];
[_startbtn setTitle:secstring forState:UIControlStateNormal];
}
и нажмите на кнопку будет вызывать этот метод:
- (void)StartBtnClick:(UIButton *)btn
{
switch (btn.tag) {
case 0:
btn.tag = 1;
[_startbtn setTitle:@"0" forState:UIControlStateNormal];
_startcountbtnsec = 0;
[self StartCountTimerStart];
NSLog(@"Start!");
break;
case 1:
btn.tag = 0;
[_startbtn setTitle:@"Start" forState:UIControlStateNormal];
[self StartCountTimerStop];
NSLog(@"Stop!");
break;
default:
break;
}
}
Я не вижу никакой проблемы с обновлением текст кнопки ... И объект зомби - «NSThread». Есть ли вероятность, что ошибка связана с кнопкой и потоком?
Это сложно. Имейте в виду, что сама авария является диагностической; фактическая ошибка произошла задолго до этого. Итак, да, в то время, когда сообщение отправляется зомби, это не ваш код. Но ваш код задал ситуацию раньше. Вам нужно попытаться работать назад. – matt
Ну, я был в похожей ситуации, и я могу точно сказать, что нет проблем с библиотеками фондов. Попробуйте запустить статический анализатор https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/static_analyzer.html (это не решит проблему, это будет только первый шаг) проверить потенциальную память утечки –
Я запускал статический анализатор, но нет никаких потенциальных утечек памяти ... – Chien