3

谁能告诉我我在这里遇到的问题是什么?

截屏

4

3 回答 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 回答