ios image drawInRect内存暴增

在UIImage处理中,时常会使用到drawInRect方法,但是缺点是内存占用过大,且造成内存泄漏无法回收。这一点是因为对象持有,导致不能及时释放的原因。
多调用几次这个方法,内存就暴增。尽管网络上查找问题的答案,autoRelease释放池也无法处理。

解决方法一:
将UIImage对象本地缓存成图片,然后正常释放对象UIGraphicsEndImageContext(),接着传递出去缓存UIImage的路径进行读取。

解决方法二:

将从上下文获取的新图片压缩处理成新的图片,后续都使用这个压缩后的新图片,压缩之前的从上下文获取的图片及时释放掉,话不多说,代码如下:

   UIImageOrientation imageOrientation = image.imageOrientation;
        if (imageOrientation != UIImageOrientationUp) {
                //开始上下文
                UIGraphicsBeginImageContext(image.size);
                //将相册的图片绘制到上下文上
                [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
                //从上下文获取已经绘制好的图片
                UIImage * tempImage = UIGraphicsGetImageFromCurrentImageContext();
                //将上下文的图片压缩
                NSData * tempImageData = UIImageJPEGRepresentation(tempImage, 0.3);
                //将压缩的数据转为图片
                tempImage = [UIImage imageWithData:tempImageData];
                //将原有的相册图片释放掉
                if (image) {
                    image = nil;
                }
                //将压缩之后的图片赋值给原有的图片地址
                image = tempImage;
                //关闭上下文
                UIGraphicsEndImageContext();
        }

instruments实测内存几乎没啥增长

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值