在iOS中使用照片框架请求画廊图像数据时出现内存问题
我正在开发一个iOS应用程序,在这个应用程序中,我必须从iPhone gallery获取所有图像,然后获取其exif值。要获取exif值,我需要使用图像数据获取图像在iOS中使用照片框架请求画廊图像数据时出现内存问题,ios,objective-c,iphone,exif,photosframework,Ios,Objective C,Iphone,Exif,Photosframework,我正在开发一个iOS应用程序,在这个应用程序中,我必须从iPhone gallery获取所有图像,然后获取其exif值。要获取exif值,我需要使用图像数据获取图像 [self.imageManager requestImageForAsset:asset targetSize:CGSizeMake(360, 360) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NS
[self.imageManager requestImageForAsset:asset targetSize:CGSizeMake(360, 360) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self doSomething]
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image=result;
});//
});
}];
我正在为此使用以下代码:
-(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}"];
}];}
对于1200左右的图像,所有这些都可以正常工作,但如果超出这个范围,就会出现内存问题,应用程序就会崩溃
我还尝试使用下面的代码获取图像,然后尝试查找调整大小的图像的exif值
[self.imageManager requestImageForAsset:asset targetSize:CGSizeMake(360, 360) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self doSomething]
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image=result;
});//
});
}];
但是我无法获取调整大小的图像的exif值
错误:libBacktraceRecording.dylib:allocate\u free\u list\u pages()--虚拟内存耗尽强>
请建议我如何处理这个内存崩溃问题。另外,请建议是否有其他方法获取exif值。您正在使用
CIImage*CIImage=[CIImage-imageWithData:imageData]加载自动释放的图像代码>。这将很快消耗大量数据,因为AutorealesPool没有被耗尽
您可以在@autoreleasepool{/*您的代码*/}
中包装图像创建和字典访问。或者只需使用CIImage*CIImage=[[CIImage alloc]initWithData:imageData]
让ARC负责释放内存。你在哪里调用你的方法getExifDataFromImage:
?@orkoden我在循环中调用它来获取所有图像的元数据。对于1000到1500,它工作正常,然后由于内存问题而崩溃。你能告诉我如何为相机卷中所有可能的图像获取图像元数据(exif)以避免崩溃吗?你必须一次批量处理50张图像,而不是一次全部处理。