CGImageRelease导致崩溃

我正在使用AGImagePickerController从相册中选取多张图片,然后将所选资产推送到viewController,在其中尝试将每个资产转换为UIImage。 但是,我发现,如果我select了超过20个图像,我会开始得到内存低的警告,应用程序退出。 这是我的转换代码

for(int i =0 ; i < [self.selectedPictures count] ; i++) { NSLog(@"Object %d",i); ALAsset *asset = [self.selectedPictures objectAtIndex:i]; ALAssetRepresentation *rep = [asset defaultRepresentation]; CGImageRef iref = [rep fullResolutionImage]; UIImage *anImage = [UIImage imageWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]]; float newHeight = anImage.size.height / (anImage.size.width / 1280); UIImage *resizedImage = [anImage resizedImageWithContentMode:UIViewContentModeScaleAspectFit bounds:CGSizeMake(newHeight, 1280.f) interpolationQuality:kCGInterpolationHigh]; UIImage *resizedThumbnailImage = [anImage resizedImageWithContentMode:UIViewContentModeScaleAspectFill bounds:CGSizeMake(290.0f, 300.f) interpolationQuality:kCGInterpolationHigh]; // JPEG to decrease file size and enable faster uploads & downloads NSData *imageData = UIImageJPEGRepresentation(resizedImage, 0.6f); //NSData *thumbnailImageData = UIImagePNGRepresentation(thumbnailImage); NSData *thumbnailImageData = UIImageJPEGRepresentation(resizedThumbnailImage, 0.6f); PFFile *photoFile = [PFFile fileWithData:imageData]; PFFile *thumbnailFile = [PFFile fileWithData:thumbnailImageData]; [photoFile saveinbackground]; [thumbnailFile saveinbackground]; } 

所以我想通了,我应该添加CGImageRelease(iref); 在图像释放iref后,内存警告消失。 但是,我的应用程序将在最后一个资产转换为UIImage后崩溃。 到目前为止,我无法找出它为什么会崩溃。

你不应该做CGImageRelease(iref); 除非使用CGImageCreateCGImageCreateCopyCGImageRetain 。 这就是它崩溃的原因。

我find了解决这个问题的方法。 使用@autoreleasepool