结合两个UIImage时收到内存警告

时间:2017-05-03 15:38:20

标签: ios objective-c uiimage

我尝试将两个UIImage与以下代码组合在一起:

- (void)combineImage:(UIImage *)image WithFrame:(CGRect)frame Completion:(ImageProcessorCompletionBlock)block {
    __weak typeof(self) wSelf = self;

    dispatch_async(_queue, ^{
        if (wSelf) {
            typeof(wSelf) sSelf = wSelf;

            UIGraphicsBeginImageContextWithOptions(sSelf.originalImage.size, NO, 0.0);

            [sSelf.originalImage drawInRect:CGRectMake(0, 0, sSelf.originalImage.size.width, sSelf.originalImage.size.height)];
            [image drawInRect:frame];

            UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            dispatch_async(dispatch_get_main_queue(), ^{
                if (block) {
                    block(result);
                }
            });
        }
    });
}

这有效但当我查看内存的使用情况时,它吓到了我。每次运行该方法时,内存都会升高,永不释放。有时我收到内存警告。任何人都可以告诉我为什么,并给我一个解决问题的解决方案?非常感谢!

1 个答案:

答案 0 :(得分:0)

最后我弄清楚了问题。 UIGraphicsBeginImageContextWithOptions(sSelf.originalImage.size, NO, 0.0);

第一个参数是图像的大小,最后一个参数是比例因子。一开始我已经将图像大小设置为与原始图像大小相同。但我也将比例设置为0.0,这意味着它被设置为设备主屏幕的比例因子。因此result图像被放大了。

如果我多次运行代码,result的大小会越来越大,最后会耗尽内存并收到警告。