CGImageRelease 导致崩溃 [英] CGImageRelease causing crash

查看:32
本文介绍了CGImageRelease 导致崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 AGImagePickerController 从相册中选择多张图片,然后将选定的资产推送到视图控制器,在那里它尝试将每个资产转换为 UIImage.但是,我发现如果我选择了超过 20 个图像,我将开始收到内存不足警告并退出应用程序.这是我的转换代码

I am using AGImagePickerController to pick multiple pictures from album, and then push the selected assets to a viewController where it tries to convert each asset into an UIImage. However, I found out that if I selected more than 20 images, I will start to get memory low warning and the app exited. Here is my code of the conversion

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);在 anImage 释放 iref 之后,内存警告消失了.但是,在将最后一个资产转换为 UIImage 后,我的应用程序将崩溃.到目前为止,我无法找出它崩溃的原因.

So i figured out that I should add CGImageRelease(iref); after anImage to release the iref, and the memory warning is gone. However, my app will crash after the last asset is converted to UIImage. And so far i could not find out why it is crashing.

推荐答案

我找到了解决此问题的方法.使用 @autoreleasepool

I found a way to fix this. use @autoreleasepool

这篇关于CGImageRelease 导致崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆