方法返回一个Core Foundation对象+1保留

时间:2013-06-21 09:44:15

标签: iphone ios

谁能告诉我这里有什么问题?

Screenshot

3 个答案:

答案 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);