2010-09-26 5 views
2

Запуск в интересную проблему и не уверен, как управлять ею.удаление объекта перед звукомPlayerDidFinishPlaying callback

Что было бы лучшим способом обработки метода обратного вызова AVAudioPlayer, audioPlayerDidFinishPlaying, если, например, экземпляр AVAudioPlayer создается с обратным вызовом, когда звук закончился, но объект, содержащий AVAudioPlayer (и обратный вызов), является освобожден до завершения звука?

Это моя текущая ситуация, когда приложение последовательно сработает, так как теперь не существует метода обратного вызова, который не существует.

Думая об этом, ответ, вероятно, будет иметь отношение ко всем обратным вызовам. Должен быть какой-то способ уничтожить или отменить методы обратного вызова.

ответ

0

Вы должны отслеживать все, что вы зарегистрировали для «обратных вызовов», и отменить их в -dealloc, например.

-(void)dealloc 
{ 
    // If you've registered for notifications, do something like this: 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 

    // If you're the delegate of something, do something like this: 
    self.audioPlayer.delegate = nil; 
    self.audioPlayer = nil; 

    [super dealloc]; 
} 

Там нет никакой магии метод, который ищет все когда-либо для любой указатель, который выглядит, как он может быть указателем на вас и нули его. С этим подходом возникает множество проблем (не ограничиваясь тем, что они являются slooooow ...).

Смежные вопросы