私のアプリには3つのビューがありますUIImageViews
。リソースファイルとして約150の画像があり、それぞれの.jpgは約24kです。アプリはすべての画像を表示しますが、一度に3つだけ表示されます。
しかし、ボタンをクリックしてさらに3つの画像をにロードするたびにUIImageViews
、Instrumentsの[Overall Bytes]列が約700K増加し、最終的にメモリ不足の警告が表示されてアプリがクラッシュします。どういうわけか、3つの画像のロードごとに使用するメモリが解放されていません。
私はグーグルでこれを行うために知っているあらゆる方法を試しましたが、成功せず、助けが必要です。
私はこれを試しました:(このコードは、さらに3つの画像をロードするアクションの一部です。3つのImageViewは、、、ですimgShownLeft
。imgShownMiddle
これらimgShownRight
はインスタンス変数です。最初にcurrentImage
3つすべてを入力しUIImageViews
、次にpreviousImage
左側の画像を入力する必要があります。nextImage
正しいもの:
NSString *strImageToSet = [[imgNamesArray objectAtIndex:currentImage] stringByAppendingFormat:@".jpg"];
UIImage *img = [UIImage imageNamed:strImageToSet];
[imgShownMiddle setImage:img];
[imgShownLeft setImage:img];
[imgShownRight setImage:img];
NSString *strPreviousImage = [[imgNamesArray objectAtIndex:previousImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strPreviousImage];
[imgShownLeft setImage:img];
NSString *strNextImage = [[imgNamesArray objectAtIndex:nextImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strNextImage];
[imgShownRight setImage:img];
それから私はこれを試しました:代わりに:
UIImage *img = [UIImage imageNamed:strImageToSet];
私が使用した:
UIImage *img = [[UIImage alloc] initWithContentsOfFile:strImageToSet];
同じ方法で
割り当てられimg
、その後にUIImageViews
[img release];
それから私は試しました:
UIImage *img = [[[UIImage alloc] initWithContentsOfFile:strImageToSet] autorelease];
それから私は試しました:
img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]];
ただし、いずれの場合も、このアクションを実行するたびにメモリ要件が増加しました。
150枚の画像をメモリに保持しなくても、一度に3枚の画像をロードしておくことができることを私は知っています!私は何が間違っているのですか?
洞察をありがとう。/SD