谁能告诉我这里有什么问题?
答案 0 :(得分:6)
即使你可能启用了ARC,它也只包含Cocoa / Objective-C对象。 Core Foundation and Core Graphics API's are different并且您仍然需要最终为任何创建的对象显式释放内存。
在您的代码中,您正在执行“createCGIImage:
”而没有平衡释放。
版本如下:
CGImageRelease(myImageRef)
所以,要做到这一点,请执行以下操作:
CGImageRef myImageRef = [context createCGImage: outputImage fromRect: outputImage.extent];
UIImage * imageTemp = [UIImage imageWithCGImage: myImageRef];
CGImageRelease(myImageRef);
答案 1 :(得分:1)
当您处理CoreFoundation对象时,ARC无关紧要。您需要将其分配给CGImageRef
变量,然后使用CFRelease(variableName)
将其释放。
即
CGImageRef cgImage = [context createCGImage:...];
// rest of your code here
CFRelease(cgImage);
答案 2 :(得分:1)
[context createCGImage:fromRect:]
方法返回保留的CGImageRef
。修复内存泄漏,需要保存对CGImageRef
的引用并在完成后释放它:
CGImageRef imageRef = [context createCGImage:outputImage fromRect:outputImage.extend];
imageTemp = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);