私は非常にがっかりしています。このメモリの問題を抱えてから 1 週間以上経ちましたが、解決策が見つかりません。
私のアプリは、Facebook の高解像度の写真をたくさん使用しています。
SDwebimageManager を使用して、すべての写真をダウンロードしてキャッシュします。
photoviewcontroller のインスタンスを作成すると、平均 40 枚の写真がダウンロードされてキャッシュされ、画面に表示されます。
ご想像のとおり、コントローラーのインスタンスごとにキャッシュを頻繁にクリアする必要があります。
しかし、SDWebimage に問題があり、キャッシュをクリアできません...空き物理メモリのサイズが減少し、アプリが常にすぐにクラッシュします
ストーリーボードを使用してそのようなコントローラーを作成しています (ご覧のとおり、最初にキャッシュをクリアします)。
if([[segue identifier] isEqualToString:@"FriendView"])
{
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
if (self.friends != nil) {
[self.friends release];
}
NSString *s = [friendsid objectAtIndex:indexload];
self.friends = (MyFriendViewController *)[segue destinationViewController];
self.friends.friend = s;
self.friends.Manager = self.Manager;
}
コントローラーでは、マネージャーを使用して、そのようなすべての写真をダウンロードします。
for(int i=0;i<items.count;i++) {
[self.Manager downloadWithURL:[NSURL URLWithString:[self.items objectAtIndex:i]]
delegate:self
options:0
success:^(UIImage *image,BOOL cached )
{
[self.photosload setObject:image forKey:[NSString stringWithFormat:@"%i", i]];
if (photosload.count == items.count) {
[self.collectionView reloadData];
}
}
failure:nil];
}
NSDictionary を使用してすべての写真を収集し、最後の写真がダウンロードされたら、コレクション ビューをリロードします。UI に戻ってコントローラーをリロードすると、メモリが増えてすぐに警告が表示され、アプリがクラッシュします。
SDCache でメモリ キャッシュをクリアしても何も起こりません。
この行の後に [image release] を置くと、非常に奇妙です:
[self.photosload setObject:image forKey:[NSString stringWithFormat:@"%i", i]];
[image release];
SDImagecacheを呼び出すとメモリがクリアされますが、想像できるように...これを行うと...直後にコレクションビューでこの辞書「photosload」を使用します。すべての画像をリリースするため、コレクションビューでスクロールするとアプリがクラッシュします...
何が起こっているのか全く分からず、とてもがっかりしています...
あなたの助けを本当にありがとう、私はこのメモリの問題で完全に立ち往生しています