4

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

我有如下代码:

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

关于在这种情况下我应该将版本放在哪里的任何想法?

4

2 回答 2

6

CGContextRelease(context)如果您以前做过 aCFRetain(context)或 a CGContextRetain(context),或者您自己创建了上下文,您只需要这样做。在您的示例中,您正在调用UIGraphicsBeginImageContextWithOptions(),它正在为您处理上下文的创建,因此,调用CGContextRelease()自己是过度释放它。

您确实需要平衡以下CGColorSpaceCreateDeviceRGB()任一:

CGColorSpaceRelease(baseSpace)

或:

if (baseSpace) CFRelease(baseSpace)
于 2012-06-14T02:35:52.243 回答
6

使用时您不拥有上下文UIGraphicsGetCurrentContext。因此,您不应该释放它。如果你要使用,CGContextRetain()那么你会释放。更多信息可在此处获得:

Core Foundation 内存管理指南

我强烈建议阅读Memory Management编程指南以了解其工作原理。

于 2012-06-14T02:36:01.060 回答