3

私は使用しCGColorSpaceRefていて、リリースするとクラッシュします。私がそれを作成してリリースする方法

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

いくつかのタスクを実行してからリリースした後

CGColorSpaceRelease(colorSpace);

コンパイラによって表示されるエラーは、「Assertion failed: (!state->is_singleton), function color_space_state_dealloc, file ColorSpaces/CGColorSpace.c, line 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、プログラムがコンパイルされ、エラーなしで実行されます。

静的アナライザー (Shift-Cmd-B) は、間違っていたかどうかを示すことができるかもしれません。2回目の呼び出しで、上記のコードに「参照カウントされたオブジェクトが解放された後に使用されます」というフラグが付けられますCGColorSpaceRelease

于 2012-09-06T09:25:45.793 に答える
-3

定数値を解放しようとしています。それはできない

于 2012-09-06T08:30:31.900 に答える