Я недавно разрабатывал музыкальный плеер, я пишу свои собственные сборщики. Я пытаюсь проверить свой код до предела, поэтому у меня в моем 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 в: didFinishLaunchingWithOptions: метод делает мой крах приложения, без консоли входа и т.д.
Это, кажется, проблемы с памятью, поэтому многие изображения сохраняются в NSArray, который хранится в ОЗУ до тех пор, пока не сохранит, что iOS-сила закрывает мое приложение.
Есть ли у вас какие-либо предложения по поводу того, что делать?
Приветствия
Посмотрите на карту памяти с NSData. –
Можете ли вы открыть это немного? –