代碼:async
- (NSMutableArray *)getAllPhoto{ NSMutableArray *arr = [NSMutableArray array]; // 全部智能相冊 PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; for (NSInteger i = 0; i < smartAlbums.count; i++) { PHCollection *collection = smartAlbums[i]; //遍歷獲取相冊 if ([collection isKindOfClass:[PHAssetCollection class]]) { PHAssetCollection *assetCollection = (PHAssetCollection *)collection; PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil]; PHAsset *asset = nil; if (fetchResult.count != 0) { for (NSInteger j = 0; j < fetchResult.count; j++) { //從相冊中取出照片 asset = fetchResult[j]; PHImageRequestOptions *opt = [[PHImageRequestOptions alloc]init]; opt.synchronous = YES; PHImageManager *imageManager = [[PHImageManager alloc] init]; [imageManager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFill options:opt resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { if (result) { [arr addObject:result]; } }]; } } } } //返回全部照片 return arr;
因爲此方法爲同步方法 因此須要放在子線程中去執行 例如:fetch
dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSMutableArray *arr = [self getAllPhoto]; NSLog(@"完成%@ \n照片總數%ld", arr, arr.count); });