나는 임의의 EXC_BAD_ACCESS KERN_INVALID_ADDRESS
을 가졌지 만 소스를 지적 할 수는 없습니다. 그러나, 나는 궁금하네요이가있을 경우 :dealloc에서 dispatch_async를 사용해도 안전합니까?
내가 audio_queue 이렇게 만든이 :
dispatch_async(_audio_queue, ^{
_audioPlayer = [[AudioPlayer alloc] init];
});
: 내가 만들고 객체가 _audioPlayer
라는 액세스하는 데 사용하는
_audio_queue = dispatch_queue_create("AudioQueue", nil);
오디오 플레이어의 소유주는 MovieView
입니다.
@implementation MovieView
{
AudioPlayer *_audioPlayer
}
그런 다음 MovieView
의 dealloc
방법, 내가 가진 :
- (void)dealloc
{
dispatch_async(_audio_queue, ^{
[_audioPlayer destroy];
});
}
이 만족할 만합니까? 블럭이 호출 될 때까지 MovieView
은 이미 할당 해제되었을 것이며, _audioPlayer
에 액세스하려고하면 더 이상 존재하지 않는다고 생각합니다. 이 경우인가요?
내 충돌 보고서는 말한다 :
MovieView.m line 0
__destroy_helper_block_
그 자리에 중단 점을 넣어 '_audioPlayer'가 아직 있는지 확인 했습니까? – Dima
충돌을 지속적으로 복제 할 수 없습니다. 현재 거기에 중단 점을 넣으면 '_audioPlayer'가 여전히 존재합니다. – Snowman
잘못된 액세스가 발생한 줄 번호가 있습니까? – Dima