我刚开始发布核心图形,所以我可能需要一些帮助。
我的代码如下:
UIImage *buttonImage() {
UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
CGMutablePathRef outerPath;
CGMutablePathRef midPath;
CGMutablePathRef innerPath;
CGMutablePathRef highlightPath;
//Some button stuff
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGContextRelease(context);
return image;
}
那个释放线,我已经放入了。虽然我收到了错误:
context_reclaim: invalid context
context_finalize: invalid context
关于我应该在这个实例中放置发布的任何想法?
答案 0 :(得分:6)
如果您之前已完成CGContextRelease(context)
或CFRetain(context)
,或者您自己创建了上下文,则只需CGContextRetain(context)
。在您的示例中,您正在调用UIGraphicsBeginImageContextWithOptions()
,它正在为您创建上下文,因此,自己调用CGContextRelease()
会过度释放它。
您需要将CGColorSpaceCreateDeviceRGB()
与a:
CGColorSpaceRelease(baseSpace)
或a:
if (baseSpace) CFRelease(baseSpace)
答案 1 :(得分:6)
使用UIGraphicsGetCurrentContext
时,您不拥有上下文。因此你不应该释放它。如果您使用CGContextRetain()
,那么您将会释放。有关这方面的更多信息,请访问:
Memory Management Guide for Core Foundation
我强烈建议您阅读Memory Management
编程指南,以了解其工作原理。