150x150屏幕上的圖像1-3MB的文件大小,這些都是拍攝的照片 ios相機。
這是我的兩個建議,以加快速度。
建議1
的ALAssetsLibrary
庫將在一個單獨的線程運行。我建議在主線程中做UI相關的東西。在ALAssetsLibrary
區塊內使用-performSelectorOnMainThread:
或dispatch_sync(dispatch_get_main_queue()
將解決您的問題。
實施例:
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *needToStop) {
dispatch_sync(dispatch_get_main_queue(), ^{
UIImage *image = [UIImage imageWithCGImage:result.defaultRepresentation.fullScreenImage];
//do UI stuff here.
}); }]; }
failureBlock:^(NSError *error) {
NSLog(@"%@",error.description);
}];
或
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *needToStop) {
UIImage *image = [UIImage imageWithCGImage:result.defaultRepresentation.fullScreenImage];
[self performSelectorOnMainThread:@selector(usePhotolibraryimage:) withObject:image waitUntilDone:NO];
}]; }
failureBlock:^(NSError *error) {
NSLog(@"%@",error.description);
}];
- (void)usePhotolibraryimage:(UiImage *)myImage{
//do UI stuf here.
}
建議2
使用AlAsset aspectRatioThumbnail
代替fullResolutionImage
高性能
dispatch_sync(dispatch_get_main_queue(), ^{
CGImageRef iref = [myasset aspectRatioThumbnail];
//CGImageRef iref = [myasset thumbnail];
UIImage *image = [UIImage imageWithCGImage:iref];
});
也許你應該只是在開始時加載圖像,只是創建一個'UIImages'而不是文件名的數組。 – carloabelli
然後它吃太多的內存,我用另一個滑塊。這個滑塊似乎並不像那樣工作 – Esqarrouth
我不太確定單獨加載圖像並將它們一次加載到數組中會如何使用顯着不同的內存量。你在第二句話中究竟是什麼意思? – carloabelli