合并两个 UIImage 时收到内存警告
Posted
技术标签:
【中文标题】合并两个 UIImage 时收到内存警告【英文标题】:Receive Memory warning in combining two UIImage 【发布时间】:2017-05-03 15:38:20 【问题描述】:我尝试将两个 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);
);
);
这行得通,但是当我检查内存的使用情况时,它吓到了我。每次我运行该方法时,内存都会上升并且永远不会释放。有时我会收到内存警告。谁能告诉我为什么并给我解决问题的方法?非常感谢!
【问题讨论】:
不相关,但您的if (block)
检查应包含整个方法体。如果调用者不关心结果,那么做任何工作都是没有意义的。
可能是你的图片太大了?
图像很大(对于信封背面的计算,它是 4 x 宽度 x 比例 x 高度 x 比例;例如,在 3x 比例设备上使用 1000 x 1000 时可能需要大约 36mb)。如果你的内存没有被释放,那么使用“调试内存图”功能并识别任何应该被释放的对象,看看是否有任何意外的强引用徘徊。但是上面的代码不太可能是re unreleased memory问题的根源。
见***.com/a/30993476/1271826
【参考方案1】:
我终于找出了问题所在。
UIGraphicsBeginImageContextWithOptions(sSelf.originalImage.size, NO, 0.0);
第一个参数是图像的大小,最后一个是比例因子。一开始我已经将图像尺寸设置为与原始尺寸相同。但我也将比例设置为0.0
,这意味着它设置为设备主屏幕的比例因子。所以result
图像被放大了。
如果我多次运行代码,result
的大小会越来越大,最后它会耗尽内存并收到警告。
【讨论】:
以上是关于合并两个 UIImage 时收到内存警告的主要内容,如果未能解决你的问题,请参考以下文章