EXC_BAD_ACCESS с кодом = 2, пока объекты существуют в памяти

#ios #iphone #objective-c #memory-management #exc-bad-access

#iOS #iPhone #objective-c #управление памятью #исключение -плохой доступ

Вопрос:

Может кто-нибудь любезно уделить время и объяснить, как можно получить такое EXC_BAD_ACCESS исключение, пока parentVC amp; parentVC.audioHandler amp; parentVC.audioHandler.player все существуют в памяти? ( все они создаются с strong указателем на них)

введите описание изображения здесь

P.S: player является AVAudioPlayer и, очевидно, имеет isPlaying метод.

P.P.S: player совпадает с parentVC.audioHandler.player и определяется несколькими строками выше как :

AVAudioPlayer *player = parentVC.audioHandler.player;

Комментарии:

1. player (или что-то еще) каким-то образом заканчивается тем 0x1c , что недопустимый указатель

2. проигрыватель определен несколькими строками выше как : AVAudioPlayer *player = parentVC.audioHandler.player;

3. player недопустимый объект. Попробуйте запустить инструмент zombies, чтобы увидеть, где он исчезает.

Ответ №1:

Обнаружена проблема :

player является допустимым AVAudioPlayer объектом и корректно существует в памяти.

Проблема в том, что он выделяется с init помощью метода, подобного :

self.player = [[AVAudioPlayer alloc] init];

Что неверно, потому AVAudioPlayer что не имеет init метода, вместо этого вы должны использовать initWithURL or initWithData !

Надеюсь, это может помочь кому-то еще.