在核心图形中发布方面遇到了问题。

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

有没有想法在这种情况下我应该把发布放在哪里?
2个回答

6
你只需要在之前执行过 CFRetain(context) 或者 CGContextRetain(context),或者你自己创建了context 的情况下才需要执行 CGContextRelease(context)。在这个例子中,你调用的是 UIGraphicsBeginImageContextWithOptions() 函数来处理 context 的创建,因此执行 CGContextRelease() 会导致 over-releasing。
你需要根据情况搭配使用一个 CGColorSpaceCreateDeviceRGB():
CGColorSpaceRelease(baseSpace)

或者一个:
if (baseSpace) CFRelease(baseSpace)

6
当使用UIGraphicsGetCurrentContext时,您不拥有上下文。因此,您不应该释放它。如果您要使用CGContextRetain(),则需要释放。更多信息请参见此处:Core Foundation内存管理指南
我强烈建议阅读内存管理编程指南,以了解其工作原理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接