我正在使用CGColorSpaceRef
,当我发布它时,它崩溃了。
我创建它的方式并发布
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
完成某项任务后再发布
CGColorSpaceRelease(colorSpace);
编译器显示的错误是 “断言失败:(!state-> is_singleton),函数color_space_state_dealloc,文件ColorSpaces / CGColorSpace.c,第127行” 奇怪的是,当我没有释放色彩空间或只是设置为零工作正常时,我不知道为什么会发生这种情况。 请帮帮我。提前致谢。 祝你有个快乐的一天。
答案 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)
您正尝试释放一个常量值。不能这样做