2010-12-07 13 views
2

Est-ce que quelqu'un sait pourquoi ce code plante quelque part dans le pool de publication (après l'appel de 'eject')? J'ai vu dans la référence de la classe AVPlayer que la propriété 'currentItem' n'est PAS déclarée comme 'retain' http://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayer_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009530-CH1-SW21AVPlayer ne conserve pas AVPlayerItem

Est-ce un bug dans la classe AVPlayer ou dois-je le conserver ailleurs?

Merci!

- (void) viewDidLoad { 
    NSURL *url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]; 
    playerItem = [[AVPlayerItem alloc] initWithURL:url]; 
    player = [[AVPlayer alloc] initWithPlayerItem:playerItem]; 
} 

- (IBAction) eject { 
    [player release]; 
    [playerItem release]; 
} 

Répondre

2

J'utilise généralement cette configuration pour un joueur:

if (!self.player) { 
    player = [[AVPlayer alloc] init]; 
    } 

    [self.player replaceCurrentItemWithPlayerItem:[AVPlayerItem playerItemWithURL:videoURL]]; 
+0

Merci pour votre réponse. J'ai finalement réussi à relâcher sans aucun crash en enlevant le contrôleur du joueur (contenant l'AVPlayer) de sa superview AVANT de libérer le contrôleur du joueur lui-même. –

0

Je crois que AVPlayer conserve AVPlayerItem dans initWithPlayerItem: fonction, de sorte que vous êtes peut-être une fuite de mémoire avec votre AVPlayerItem. "currentItem" est une propriété readonly et ne doit pas être "retain" qui est seulement pour les propriétés accessibles en écriture.

Questions connexes