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 }
注意 :也请看这个问题 。