最近我一直在开发音乐播放器,我正在编写我自己的拾音器。 我试图测试我的代码是有限制的,所以我的iPhone中有大约1600张专辑。缓存上千张图片
我使用AQGridView进行相册视图,并且因为MPMediaItemArtwork是NSObject的一个子类,所以您需要启动一个方法来从中获取图像,并且该方法会缩放图像。
对于每个单元的缩放都使用了太多的CPU,因此我的网格专辑视图很滞后,尽管我所有的努力都是手动驱动每个单元的包含。
所以我想在启动应用程序时使用GCD进行开始缩放,然后将它们保存到文件中,并为每个单元格读取该文件。
但是,我的代码
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");
});
在AppDelegate中的application:didFinishLaunchingWithOptions:方法中,使我的应用程序崩溃,没有任何控制台登录等
这似乎是内存的问题,这么多的图像保存在存储在RAM中的NSArray中,直到保存了iOS部队关闭我的应用程序。
你有什么建议做什么?
干杯
调查与NSData的内存映射。 – 2012-04-04 16:36:48
你可以打开一下吗? – 2012-04-04 16:38:10