Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS中使用照片框架请求画廊图像数据时出现内存问题_Ios_Objective C_Iphone_Exif_Photosframework - Fatal编程技术网

在iOS中使用照片框架请求画廊图像数据时出现内存问题

在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

我正在开发一个iOS应用程序,在这个应用程序中,我必须从iPhone gallery获取所有图像,然后获取其exif值。要获取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;
             });//
         });
     }];
我正在为此使用以下代码:

-(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张图像,而不是一次全部处理。