我尝试将两个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);
}
});
}
});
}
这有效但当我查看内存的使用情况时,它吓到了我。每次运行该方法时,内存都会升高,永不释放。有时我收到内存警告。任何人都可以告诉我为什么,并给我一个解决问题的解决方案?非常感谢!
答案 0 :(得分:0)
最后我弄清楚了问题。
UIGraphicsBeginImageContextWithOptions(sSelf.originalImage.size, NO, 0.0);
第一个参数是图像的大小,最后一个参数是比例因子。一开始我已经将图像大小设置为与原始图像大小相同。但我也将比例设置为0.0
,这意味着它被设置为设备主屏幕的比例因子。因此result
图像被放大了。
如果我多次运行代码,result
的大小会越来越大,最后会耗尽内存并收到警告。