Objective c 合并两个图像并获得一个图像,但由于内存压力,应用程序崩溃

Objective c 合并两个图像并获得一个图像,但由于内存压力,应用程序崩溃,objective-c,image-processing,ios7,uiimageview,mask,Objective C,Image Processing,Ios7,Uiimageview,Mask,我的应用程序因内存压力而崩溃 在我的应用程序中,我组合了两个图像,得到一个图像,并使用此代码在UIImageView中设置此图像 + (UIImage*)imageByCombiningImages:(UIImage*)firstImage withImage:(UIImage*)secondImage { @autoreleasepool { UIImage *image = nil; CGSize newImageSize = CGSizeM

我的应用程序因内存压力而崩溃

在我的应用程序中,我组合了两个图像,得到一个图像,并使用此代码在UIImageView中设置此图像

+ (UIImage*)imageByCombiningImages:(UIImage*)firstImage withImage:(UIImage*)secondImage
{
    @autoreleasepool
    {
        UIImage *image = nil;

        CGSize newImageSize = CGSizeMake(MAX(firstImage.size.width, secondImage.size.width), MAX(firstImage.size.height, secondImage.size.height));
        if (UIGraphicsBeginImageContextWithOptions != NULL)
        {
            UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]);
        }
        else
        {
            UIGraphicsBeginImageContext(newImageSize);
        }

        [firstImage drawAtPoint:CGPointMake(roundf((newImageSize.width-firstImage.size.width)/2), roundf((newImageSize.height-firstImage.size.height)/2))];

        firstImage =nil;
        [secondImage drawAtPoint:CGPointMake(roundf((newImageSize.width-secondImage.size.width)/2), roundf((newImageSize.height-secondImage.size.height)/2))];


        secondImage=nil;

        image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
}
我一次调用该函数5次,并根据该函数返回的图像设置UIImageView

但在执行时,内存总是在增加,过了一段时间,应用程序就会崩溃


那么,告诉我如何降低内存压力?

您的问题可能来自其他方面。我只是在你的功能上运行仪器,一切正常

尖峰是当我点击运行代码的按钮时出现的。

代码如下:

+ (UIImage*)imageByCombiningImages:(UIImage*)firstImage withImage:(UIImage*)secondImage
{
    @autoreleasepool
    {
        UIImage *image = nil;

        CGSize newImageSize = CGSizeMake(MAX(firstImage.size.width, secondImage.size.width), MAX(firstImage.size.height, secondImage.size.height));
        if (UIGraphicsBeginImageContextWithOptions != NULL)
        {
            UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]);
        }
        else
        {
            UIGraphicsBeginImageContext(newImageSize);
        }

        [firstImage drawAtPoint:CGPointMake(roundf((newImageSize.width-firstImage.size.width)/2), roundf((newImageSize.height-firstImage.size.height)/2))];

        firstImage =nil;
        [secondImage drawAtPoint:CGPointMake(roundf((newImageSize.width-secondImage.size.width)/2), roundf((newImageSize.height-secondImage.size.height)/2))];


        secondImage=nil;

        image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
}

- (IBAction)callFunctionAction:(id)sender
{
    UIImage *firstImage = [UIImage imageNamed:@"image1"];
    UIImage *secondImage = [UIImage imageNamed:@"image2"];

    UIImage *thirdImage = [[self class] imageByCombiningImages:firstImage withImage:secondImage];
    self.imageView.image = thirdImage;
}

最后一行将抛出警告,但示例仍然有效

但是我调用了这个函数5到6次,并在UIImageView中设置了这个图像。我使用了2 MB大小和分辨率为1024*768的图像,以及视网膜iPad的视网膜图像。我刚刚在故事板上添加了一个UIImageView,并编辑了iAction以设置图像视图的图像,如下所示:self.imageView.image=thirdImage;仪器返回同样的东西。问题可能出在其他地方请看这个。。我是这样使用这个方法的……你用仪器测试过我的代码吗?您确定这是导致内存问题的代码部分吗?