在核心图形中发布时出现问题

时间:2012-06-14 01:47:49

标签: iphone objective-c ios core-graphics drawrect

我刚开始发布核心图形,所以我可能需要一些帮助。

我的代码如下:

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

关于我应该在这个实例中放置发布的任何想法?

2 个答案:

答案 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编程指南,以了解其工作原理。