私は最近音楽プレーヤーを開発しています。私は自分のピッカーを書いています。 私のコードを制限しようとしているので、私のiPhoneに約1600枚のアルバムがあります。何千もの画像をキャッシュする
私はAQGridViewをアルバムビューに使用しています.MPMediaItemArtworkはNSObjectのサブクラスであるため、イメージを取得するためにはメソッドを起動する必要があり、そのメソッドは画像を拡大/縮小します。
各セルのスケーリングは、あまりにも多くのCPUを使用しているため、私のグリッドアルバムの表示は手間がかかります。
私はアプリの起動時にGCDでスケーリングを開始し、それらをファイルに保存し、各セルのファイルを読み込むことを考えました。
しかし、私のコードAppDelegateのアプリケーションで
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
MPMediaQuery *allAlbumsQuery = [MPMediaQuery albumsQuery];
NSArray *albumsArray = allAlbumsQuery.collections;
for (MPMediaItemCollection *collection in albumsArray) {
@autoreleasepool {
MPMediaItem *currentItem = [collection representativeItem];
MPMediaItemArtwork *artwork = [currentItem valueForProperty:MPMediaItemPropertyArtwork];
UIImage *artworkImage = [artwork imageWithSize:CGSizeMake(90, 90)];
if (artworkImage) [toBeCached addObject:artworkImage];
else [toBeCached addObject:blackImage];
NSLog(@"%@", [currentItem valueForProperty:MPMediaItemPropertyAlbumTitle]);
artworkImage = nil;
}
}
dispatch_async(dispatch_get_main_queue(), ^{
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:albumsArray] forKey:@"covers"];
});
NSLog(@"finished saving, sir");
});
:didFinishLaunchingWithOptions:メソッドは、私のアプリのクラッシュを行い、任意のコンソールなしでログインするなど
これは、メモリの問題のようですが、非常に多くの画像が保存されますNSArrayは私のアプリを閉じるためにRAMに保存されます。
どうすればよいですか?
乾杯
NSDataでメモリマッピングを調べます。 –
これを少し開くことができますか? –