4

我需要获取有关资产的信息而不将其加载到内存中,如果资产非常大,这可能需要很长时间。

由于我将遍历设备中可用的所有资产,因此可能需要很长时间。

我正在使用以下代码将资产加载到NSData对象中并检索有关它的一些信息:

- (NSData*)getAssetInfo: (NSUInteger*) assetIndex {

    PHFetchOptions *fetchOptions;
    fetchOptions.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES], ];
    PHFetchResult *fetchResult = [PHAsset fetchAssetsWithOptions:fetchOptions];

    __block NSData *iData = nil;

    PHAsset *asset = [fetchResult objectAtIndex: assetIndex];

    PHImageManager *imageManager = [PHImageManager defaultManager];
    PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
    options.synchronous = YES;
    options.version = PHImageRequestOptionsVersionCurrent;

    @autoreleasepool {
        [imageManager requestImageDataForAsset:asset options:options resultHandler:^(NSData *imgData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
            //NSLog(@"requestImageDataForAsset returned info(%@)", info);
            NSURL *url = [info valueForKey:  @"PHImageFileURLKey"];
            NSString *urlAsString = [url absoluteString];
            gAssetFilename = [urlAsString lastPathComponent];
            gAssetCreationDate = asset.creationDate;
            iData = imgData;
        }];
    }

    if (iData != nil) {
        return iData;
    }
    else{
        NSLog(@"OOPS!");
        return nil;
    }
}

这行得通,但正如我所说,它可能需要很长时间。

是否可以在不首先将其完全加载到内存中的情况下获取资产的大小以及有关资产的其他信息?

4

0 回答 0