【发布时间】: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问题的根源。
标签: ios objective-c uiimage