我正在开发一款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值。
答案 0 :(得分:0)
您正在使用CIImage* ciImage = [CIImage imageWithData:imageData];
加载自动释放的图片。这将很快耗尽大量数据,因为Autorealeasepool没有耗尽。
您可以在@autoreleasepool{/* your code*/}
中包装图像创建和字典访问。或者只需使用CIImage* ciImage = [[CIImage alloc] initWithData:imageData];
让ARC负责释放内存。