2010-12-16 3 views
0

Ich habe ein Problem mit MPMoviePlayerViewController auf iPad iOS 4.2. Eine Anwendung gibt ein Video wieder, aber wenn das Video stoppt, wird der Speicher nicht freigegeben. Um einen Video-Player ich den folgenden Code verwenden, zu erstellen:MPMoviePlayerViewController Speicherproblem


    MPMoviePlayerViewController * videoPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:articleUrl]; 
    [videoPlayer moviePlayer].movieSourceType = MPMovieSourceTypeFile; 
    [videoPlayer moviePlayer].controlStyle = MPMovieControlStyleDefault; 
    [videoPlayer moviePlayer].scalingMode = MPMovieScalingModeAspectFit; 
    [videoPlayer moviePlayer].fullscreen = NO; 

    self.playerViewController = videoPlayer; 
    [videoPlayer release]; 
    videoPlayer = nil; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(movieFinishedCallback:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:[playerViewController moviePlayer]]; 

    MPMoviePlayerController *player = [playerViewController moviePlayer]; 

    CGRect playerFrame = CGRectMake(20, 20, self.view.frame.size.width - 40, self.view.frame.size.height - 40); 
    player.view.frame = playerFrame; 
    [self.view addSubview:player.view]; 
    [player play]; 

und es besteht der movieFinishedCallback: Code-Methode:


    - (void) movieFinishedCallback:(NSNotification*) aNotification { 
    MPMoviePlayerController *player = [aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:player]; 
    [player.view removeFromSuperview]; 
    [player release]; 
    player = nil; 

} 

mir jemand dabei helfen kann? Ich habe viele Themen zu diesem Problem gelesen, aber keine Lösung gefunden.

+0

Dies wird Ihre Frage nicht beantworten, aber es gibt einen Fehler in Ihrem Code - die Zeile, die 'player release' lautet, sollte' self.videoPlayerController = nil' sein. Andernfalls lasse ich den Player los, behalte aber einen Zeiger darauf (sehr schlecht!) – deanWombourne

Antwort

0

Ihr Code sieht gut aus - Ihre Veröffentlichungen Ihre Vorstellungen usw.

Haben Sie in Instruments laufen diese behält - das heißt es ist auf jeden Fall ein Leck? Woher weißt du, dass die Erinnerung nicht befreit wird?

Es ist nichts falsch mit dem Videowiedergabe-Framework, das Ihr Video zwischenspeichert, solange es den Speicher freigibt, wenn Sie knapp werden (d. H. Eine niedrige Speicherwarnung erhalten). Versuchen Sie, es im Simulator auszuführen und eine Speicherwarnung zu simulieren - ich wette, dass der Speicher dann freigegeben wird.

Außerdem wissen Sie nicht, ob es an irgendeinem Punkt automatisch freigegeben wird.

Ich würde nicht über dieses Problem besorgt sein, bis Sie in Speicherwarnungen kommen. Bis dahin würde ich einfach davon ausgehen, dass das Video-Framework weiß, was es tut!

+0

Ich habe Instrumente gespielt. Und wenn das Video stoppt, wird die Größe des zugewiesenen Speichers nicht verringert. Ich meine, wenn die Größe des zugewiesenen Speichers während der Wiedergabe des Videos 20 MB beträgt, ist die Größe des zugewiesenen Speichers nach dem Ende des Videos immer noch 20 MB. –

+0

Das ist immer noch nicht unbedingt ein Problem - wenn die App den Speicher freigibt, wenn eine Warnung zu wenig Speicher vorhanden ist, dann ist es in Ordnung. Versuchen Sie, eine Speicherwarnung im Simulator zu senden und zu sehen, was passiert. – deanWombourne