Objective c 合并两个图像并获得一个图像,但由于内存压力,应用程序崩溃
我的应用程序因内存压力而崩溃 在我的应用程序中,我组合了两个图像,得到一个图像,并使用此代码在UIImageView中设置此图像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
+ (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;仪器返回同样的东西。问题可能出在其他地方请看这个。。我是这样使用这个方法的……你用仪器测试过我的代码吗?您确定这是导致内存问题的代码部分吗?