0

いくつかの画像を表示したいのですが、画像が利用できない場合はデフォルトの画像を表示したいと思います。分析機能を使用すると、潜在的なリークに関する警告が表示されます。imageNamed を使用する場合、メモリが割り当てられていないことを理解しています。私のコードの一部の下を参照してください

if (!isMyFileThere){
    image = [UIImage imageNamed:@"default.png"];            
}
else{
    image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
}
4

3 に答える 3

3

これは自動リリースされます

 image = [UIImage imageNamed:@"default.png"];

これではありません

image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];

あなたはこれをする必要があります:

image = [[[UIImage alloc] initWithContentsOfFile:pngFilePath] autorelease];

ルールは、メソッド名が、で始まる場合、またはメソッド名を所有していてalloc、でまたはを使用して自分で解放する必要がある場合です。それ以外のものはあなたのものではないので、リリースしてはいけません。newcopymuteableCopyreleaseautorelease

retainオブジェクトを呼び出す場合は、同じ回数release(または)オブジェクトを呼び出す必要があります:)autorelease

于 2011-08-24T15:05:00.533 に答える
0

image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];割り当てを行ったので、それを解放する必要があります。そうしないと、リークが発生する可能性があります。もう 1 つのステートメントは autoreleased オブジェクトです。

于 2011-08-24T15:05:43.563 に答える
0

手動で解放するまでオブジェクトを保持したい場合は、retain を使用する必要があります。autorelease は、各実行ループの反復の終わりに排出される現在の NSAutorelease プールにオブジェクトを追加します。解放されたオブジェクトを使用しようとすると、プログラムがクラッシュします。

iOS 5.0 では、ARC を有効にすると、"retain"、"autorelease"、または "release" を使用する必要がなくなります。これらはコンパイラによって自動的に追加されます。

于 2011-08-24T15:12:38.800 に答える