2010-12-16 21 views
0

iPad iOS 4.2のMPMoviePlayerViewControllerに問題があります。アプリケーションはビデオを再生しますが、ビデオが停止するとメモリは解放されません。MPMoviePlayerViewControllerメモリの問題


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

とmovieFinishedCallbackがあります:メソッドのコード:私は、次のコードを使用してビデオプレーヤーを作成するには


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

} 

を誰もがそれを手伝ってくれるか?私はこの問題に関連した多くの話題を読んだが解決策は見つけられていない。

+0

これはあなたの質問に答えることはできませんが、あなたのコードにバグがあります。 'player release'という行は' self.videoPlayerController = nil'でなければなりません。さもなければ、あなたのプレーヤーを解放しますが、それにポインタを置いてください(非常に悪い!) – deanWombourne

答えて

0

あなたのコードがよさそうだ - すなわち、それは間違いなくリークである - あなたのリリースでは、あなたが保持などに合わせ

は、あなたが楽器でこれを実行することがありますか?メモリが解放されていないことをどのように知っていますか?

ビデオ再生フレームワークに問題はありません。短くするとメモリを解放する限りビデオをキャッシュしたままにしておくことができます(メモリ不足の警告が表示される)。シミュレータでそれを実行して、メモリ警告をシミュレートしてみてください。メモリが解放されると思います。

また、どの時点でも自動リリースされるかどうかはわかりません。

メモリの警告が表示されるまで、この問題は心配しません。それまで、私はビデオフレームワークが何をしているかを知っていると仮定していました!

+0

私はInstrumentsを走らせました。ビデオが割り当てられたメモリのサイズを停止しても、それは減少しません。私は、ビデオの再生中に割り当てられたメモリのサイズが20 Mbで、ビデオが完成した後も割り当てられたメモリのサイズがまだ20 Mbであることを意味します。 –

+0

まだそれは必ずしも問題ではありません。もしメモリが足りなくなってからメモリが解放されれば、問題ありません。シミュレータでメモリの警告を送信し、何が起こるかを見てください。 – deanWombourne