发布CGColorSpaceRef时Iphone应用程序崩溃

时间:2012-09-06 08:24:04

标签: iphone objective-c xcode color-space

我正在使用CGColorSpaceRef,当我发布它时,它崩溃了。 我创建它的方式并发布

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

完成某项任务后再发布

CGColorSpaceRelease(colorSpace);

编译器显示的错误是 “断言失败:(!state-> is_singleton),函数color_space_state_dealloc,文件ColorSpaces / CGColorSpace.c,第127行” 奇怪的是,当我没有释放色彩空间或只是设置为零工作正常时,我不知道为什么会发生这种情况。 请帮帮我。提前致谢。 祝你有个快乐的一天。

3 个答案:

答案 0 :(得分:4)

看起来您已经过度发布了colorspace对象。我刚刚运行了以下程序,我收到了您引用的错误消息。

int main(int argc, char *argv[]) {
    @autoreleasepool {
        CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();

        CGColorSpaceRelease(colorspace);
        CGColorSpaceRelease(colorspace);
    }
}

SIGABRT个,出现以下错误:

Assertion failed: (!state->is_singleton), function color_space_state_dealloc, file ColorSpaces/CGColorSpace.c, line 127.

如果程序编译并运行没有错误,我只调用CGColorSpaceRelease

静态分析仪(Shift-Cmd-B)可能会显示您出错了。它肯定会在第二次CGColorSpaceRelease调用中将上面的代码标记为“在它被释放后使用引用计数对象”。

答案 1 :(得分:1)

如果/必要,您实际上有责任保留和释放色彩空间!即如果你需要,保留它。如果您不需要保留,请不要发布!有关此主题的更多信息,请参阅文档:Memory Management Programming Guide for Core Foundation

<强>更新

关于我们的海报上面遇到的有线错误,请查看发布here的ddopsons。不幸的是,没有提供解决方案,而是可能的解决方法。

答案 2 :(得分:-3)

您正尝试释放一个常量值。不能这样做