0

記憶に問題があります。ARCを使用しています。ビューの UIImageView に .jpg をロードしています。

Code showing example situation:

//.h file

@interface myClass : UIViewController
{
    IBOutlet UIImageView * back;
}
// don' t have @property
// back is connected in .xib

//.m file
-(void) viewDidLoad {
    UIImage *  myImg =[UIImage imageNamed:imgName];

    back.image=myImg;
}

-(void) returnToPrevoriousView {
   [self removeFromSuperview];
   back.image = nil;
}

問題は、私が他のビューからこのビューに来て、imgName が多くの値を持つことができることです。たとえば、myClass に 6 回アクセスすると、ログが記録されます:メモリの警告が表示され、アプリがクラッシュします。

myImg がメモリから解放されていないと思いますか? 私はそれを修正する方法がわかりませんか?JPG は約 100kb あります。

PS。.png をロードすると、通常 600kB の .png 画像にもかかわらず、動作します (同様に高速です)。しかし、私はそれがまだメモリを解放していないと思いますか?

4

3 に答える 3

2

UIImage imageNamed:画像がアプリ内で再び使用されないことが確実な場合は使用しないでください。imageNamed:追加のメモリを使用する内部キャッシング メカニズムを使用します。

UIImageクラスリファレンスから:

このメソッドは、指定された名前のイメージ オブジェクトをシステム キャッシュで検索し、存在する場合はそのオブジェクトを返します。一致する画像オブジェクトがまだキャッシュにない場合、このメソッドは指定されたファイルから画像データをロードしてキャッシュし、結果のオブジェクトを返します。

UIImage imageWithContentsOfFile:画像はキャッシュされないため、代わりに使い捨ての画像を使用してください。

imageNamed:: Retina バージョンの自動読み込み (@2x)のみ

于 2012-04-26T11:29:37.843 に答える
1

一般に、PNG 画像を使用してみてください。iOS は PNG 画像を非常に効率的に処理するように最適化されているため、この最適化は JPEG 画像には提供されません。iOS が jpg を表示し始めると、はるかに複雑なデコード処理が必要になります。より多くの CPU エネルギー。

于 2012-04-26T11:23:57.540 に答える
0

プロパティを IBOutlet に割り当てて合成します。

于 2012-04-26T10:44:43.533 に答える