2010-09-26 20 views
2

Exécutez un problème intéressant et ne savez pas comment le gérer. Quelle serait la meilleure façon de gérer la méthode de rappel AVAudioPlayer, audioPlayerDidFinishPlaying, si, par exemple, une instance de AVAudioPlayer est créée avec un rappel lorsque l'audio est fini mais que l'objet contenant AVAudioPlayer (et callback) est désaffecté avant la fin de l'audio?désallocation d'objet avant audioPlayerDidFinishPlaying callback

Ceci est ma situation actuelle où l'application se bloque de manière cohérente comme une méthode de rappel maintenant inexistant tente d'être appelée.

En y réfléchissant, la réponse serait probablement pertinente à travers le tableau des rappels. Il doit y avoir un moyen de détruire ou d'annuler les méthodes de rappel.

Répondre

0

Vous devez garder une trace de tout ce que vous avez enregistré pour les "rappels" à partir de -dealloc et de les désactiver, par exemple.

-(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]; 
} 

Il n'y a pas la méthode magique qui recherche tout jamais pour tout pointeur qui ressemble à cela pourrait être un pointeur vers vous et il zéros. Il y a beaucoup de problèmes avec cette approche (pas limité à slooooow ...).