3

我正在使用CGColorSpaceRef,当我释放它时,它会崩溃。我创建和发布的方式

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

完成一些任务然后释放

CGColorSpaceRelease(colorSpace);

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

4

3 回答 3

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在程序编译并运行时没有错误时调用。

The static analyser (Shift-Cmd-B) may well be able to show you were you've gone wrong. It certainly flags the above code with "Reference counted object is used after it is released" on the second CGColorSpaceRelease call.

于 2012-09-06T09:25:45.793 回答
1

如果/有必要,您实际上负责保留和释放色彩空间!即,如果您需要,请保留它。不需要保留就不要释放!有关此主题的更多信息,请参阅文档:Core Foundation 的内存管理编程指南

更新:

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

于 2012-09-06T08:37:56.190 回答
-3

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

于 2012-09-06T08:30:31.900 回答