ARC では、 にキャストできなくなりましCGColorRef
たid
。ブリッジキャストを行う必要があることを学びました。clang docsによると:
ブリッジされたキャストは、次の 3 つのキーワードのいずれかで注釈が付けられた C スタイルのキャストです。
(__bridge T) op
オペランドを宛先 type にキャストしますT
。T
が保持可能なオブジェクト ポインター型である場合、保持op
不可能なポインター型である必要があります。が保持不可能なポインター型である場合T
、op は保持可能なオブジェクト ポインター型である必要があります。そうしないと、キャストの形式が正しくありません。所有権の譲渡はなく、ARC は保持操作を挿入しません。
(__bridge_retained T) op
保持可能なオブジェクト ポインター型である必要があるオペランドを、保持不可能なポインター型である必要がある宛先の型にキャストします。ARC はローカル値の通常の最適化に従って値を保持し、受信者はその +1 のバランスをとる責任があります。
(__bridge_transfer T) op
保持不可能なポインター型である必要があるオペランドを、保持可能なオブジェクトポインター型である必要がある宛先の型にキャストします。ARC は、ローカル値の通常の最適化に従って、囲んでいる完全な式の最後で値を解放します。これらのキャストは、オブジェクトを ARC の制御内外に転送するために必要です。保持可能なオブジェクト ポインターの変換に関するセクションの理論的根拠を参照してください。
__bridge_retained
orキャストを純粋に使用して、__bridge_transfer
ARC に不均衡な保持または解放をそれぞれ出力させることは、不適切な形式です。
それぞれどんなシチュエーションで使うの?
たとえば、 の配列を受け入れるプロパティがありCAGradientLayer
ます。私の推測では、ここで使用する必要がありますが、なぜ使用する必要があるのか (または使用しないのか) は明確ではありません。colors
CGColorRef
__brige