2012-05-12 19 views
0

私は理論的には無限に動作するはずのプロジェクトを行ってきました。これはあなたがプログラムを開始し、Ipadを電源に接続し、何日、何ヶ月、何年も働くことを意味します。私が何をしても、メモリは徐々に割り当てられますが、解放されません。インストゥルメントのリークはメモリリークがないことを示していますが、インストゥルメントアロケーションとアクティビティモニタのメモリは徐々に割り当てられ、成長し、成長します。無限に実行されているアプリケーション、特に無限のビデオ再生でメモリリークが発生する

ViewController.h

@interface ViewController : UIViewController 
{ 
    MPMoviePlayerController *player; 

} 

ViewController.m

:それは特に動画 簡単な例(Xcodeの4.3、ノーARC)を再生するとき、発生場所がたくさんあります
@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    player = [[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:@"http://mysite.com/movie.mp4"]]; 

    player.view.frame = CGRectMake(400, 500, 360, 240); 
    [self.view addSubview:player.view]; 
    player.controlStyle = MPMovieControlStyleNone; 
    player.repeatMode = MPMovieRepeatModeOne; 
    [player play]; 
} 

- (void)viewDidUnload 
{ 
     [player stop]; 
     [player.view removeFromSuperview]; 
     [player release]; 
     [super viewDidUnload]; 
} 

- (void)dealloc 
{ 
    [player release]; 
    [super dealloc]; 
} 

このシンプルなアプリケーションは何もしません。単にビデオをループ再生します。 3分ごとに平均100kbが割り当てられます。毎日 - 平均40MB。 Instruments Activity Monitorでプロファイリングしています。時間が経つと、アプリは死ぬ。 何が間違っていますか?なぜ私はちょうどビデオ(ループ再生)を見て、新しいオブジェクトを初期化していない、メモリが成長している?

+0

これらのサブビューを削除していますか? ARCを使用していますか?いいえ、あなたはいつ[プレーヤーのリリース]をしますか?ビルドと分析によって見つかった問題があれば解決するようにしてください。 [ヒープショット分析](http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-望ましくない記憶増加/)。 –

+0

はい、viewDidUnloadで削除します。私はARCを使用しません。私はviewDidUnloadとdeallocで解放しています。 Analyzeは "No issues"を示します。私はアプリケーションを起動し、プレーヤーを初期化して起動し、何もしていない、ただビデオを見る、それを再生する(MPMovieRepeatModeOne - 無限に再生する)。私はアプリケーションをオフにしません。 –

答えて

0

入力ストリームのプリロードに使用されるキャッシュは、アプリが再度読み込まれたり閉じられたりしている場合にのみリフレッシュされます。アプリを閉じて再び開くとデータが蓄積されます。メモリ割り当てはそこにあります。基本的にメモリリーク。

また、使用後にMPMoviePlayerController通知を削除する必要があります。 また、プレーヤーオブジェクトを解放する必要があります。

[player.view removeFromSuperview]をどこで使用していますか?

+0

はい、私はremoveFromSuperviewをリリースしてプレーヤーを解放しますが、ビデオを見ているとメモリが増えています。 –

関連する問題