ALAssetsLibrary太慢 – Objective-C

什么是从相机胶卷,保存的照片加载10-20全屏图像的快速方式?

我使用这个代码,但加载10张照片,我需要等待大约5-10秒。 我正在使用iPhone 4S。

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if(_savedPhotos.count>=11) *stop = YES; [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *needToStop) { NSLog(@"%d",index); if(_savedPhotos.count<11) { UIImage *image = [UIImage imageWithCGImage:result.defaultRepresentation.fullScreenImage]; [_savedPhotos addObject:image]; } else { *needToStop = YES; } }]; } failureBlock:^(NSError *error) { NSLog(@"%@",error.description); }]; 

ALAssetsLibrary库将在单独的线程上运行。 所以可能需要时间与UI相关的和其他的东西进行交stream。

因此,在ALAssetsLibrary块中使用-performSelectorOnMainThread:withObject:waitUntilDone: :。

改变你的代码如下

 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *needToStop) { NSLog(@"%d",index); 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 your all UI related and all stuff here } 

注意 :也请看这个问题 。