使用iOS中的Photos Framework请求Gallery图像DATA时出现内存问题

时间:2016-02-02 13:13:17

标签: ios objective-c iphone exif photosframework

我正在开发一款iOS应用,我必须从 iPhone图库中获取所有图片,然后获取 exif值。要获得exif值,我需要使用图片数据获取图片。

我正在使用以下代码:

   |      A     |   B   |   D   |   F   |
---+------------+-------+-------+-------+  
 1 |  2016,Feb,1|   2016|Feb    |      1|
---+------------+-------+-------+-------+ 

对于 1200 周围的图片,一切正常,但如果超出此范围,我们会遇到内存问题,应用程序崩溃。

我还尝试使用以下代码获取图像以获取图像,然后尝试查找已调整大小的图像的exif值。

-(void)getExifDataFromImage:(NSInteger)index{
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.synchronous=YES;
options.resizeMode=PHImageRequestOptionsResizeModeFast;

[[PHImageManager defaultManager] requestImageDataForAsset:asset
                                                  options:options
                                            resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info)
 {

     CIImage* ciImage = [CIImage imageWithData:imageData];
     NSLog(@"Metadata : %@", ciImage.properties);

     exifCount++;

     NSDictionary *pro=ciImage.properties;
     NSDictionary *exifDic=[pro objectForKey:@"{Exif}"];
     NSDictionary *tiffDic=[pro objectForKey:@"{TIFF}"];

}];}

但是我无法获得调整大小的图像的exif值。

错误:libBacktraceRecording.dylib:allocate_free_list_pages() - 虚拟内存耗尽!

请建议我如何处理此内存崩溃问题。另外请建议是否有另一种方法来获得exif值。

1 个答案:

答案 0 :(得分:0)

您正在使用CIImage* ciImage = [CIImage imageWithData:imageData];加载自动释放的图片。这将很快耗尽大量数据,因为Autorealeasepool没有耗尽。

您可以在@autoreleasepool{/* your code*/}中包装图像创建和字典访问。或者只需使用CIImage* ciImage = [[CIImage alloc] initWithData:imageData];让ARC负责释放内存。