まず第一に、ARCにはさらに大きな問題があり、メモリ管理を完全に制御する必要があるため、ARCを使用していません。
状況は次のとおりです。サーバーから多くのリモートJPEG画像をロードし、それらをスクロールビューで表示する必要があります。ユーザーが少し下にスクロールすると、スクロールビューの一番上の画像が解放されます。これは機能しており、含まれているビューはすべて正常に解放されます。問題は、リモートイメージをロードした後、多くのメモリが割り当てられたままになり、解放されないことです。リモート画像をフェッチするための私のコードは次のとおりです(UIImageViewをサブクラス化):
- (void)downloadImage {
NSData *posterData = [[NSData alloc] initWithContentsOfURL:self.url options:NSDataReadingUncached error:nil];
UIImage *img = [[UIImage alloc] initWithData:posterData];
[posterData release];
self.image = img;
[img release];
}
// that gets called from:
- (void)setImageFromURL:(NSURL *)_url{
[NSThread detachNewThreadSelector:@selector(downloadAndLoadImage) toTarget:self withObject:nil];
}
Instrumentsを使用してコードを検査すると、UIImageViewは意図したとおりに解放されますが、それでも次のものがメモリに残り、スパムを送信します。
どうやらCFData、Malloc 9.00 KB、NSConcreteDataはすべて私のdownloadImageメソッドの結果です。私は何が間違っているのですか?これは私を夢中にさせています...どのようにして多くのリモートイメージをメモリセーフにロードしますか?NSURLConnectionも試しましたが、かなり悪く、良くなりました。:(
画像サイズは6から25KBまで変化します。
よろしくお願いします!
アップデート
うまく機能し、非常に使いやすいSDWebImageを使用することになりました。