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