#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
!
Надеюсь, это может помочь кому-то еще.