谁能告诉我我在这里遇到的问题是什么?
问问题
556 次
3 回答
6
即使您可能启用了 ARC,它也仅涵盖 Cocoa / Objective-C 对象。Core Foundation 和 Core Graphics API 是不同的,您仍然需要最终显式释放内存以用于创建的任何对象。
在您的代码中,您正在做一个createCGIImage:
没有平衡发布的“”。
一个版本看起来像:
CGImageRelease(myImageRef)
因此,要正确执行此操作,请执行以下操作:
CGImageRef myImageRef = [context createCGImage: outputImage fromRect: outputImage.extent];
UIImage * imageTemp = [UIImage imageWithCGImage: myImageRef];
CGImageRelease(myImageRef);
于 2013-06-21T09:50:52.293 回答
1
ARC 与您处理 CoreFoundation 对象无关。您需要将其分配给一个CGImageRef
变量,然后使用CFRelease(variableName)
.
IE
CGImageRef cgImage = [context createCGImage:...];
// rest of your code here
CFRelease(cgImage);
于 2013-06-21T09:53:58.260 回答
1
该[context createCGImage:fromRect:]
方法返回一个保留的CGImageRef
。修复您的内存泄漏,您需要保存对它的引用CGImageRef
并在完成后释放它:
CGImageRef imageRef = [context createCGImage:outputImage fromRect:outputImage.extend];
imageTemp = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
于 2013-06-21T09:54:05.453 回答