さて、まずあなたは、あなたがARCかを使用している場合は知っている必要があります。次に、キャストで実際に何をしたいのかを知る必要があります。その値を使用したい、または所有権を譲渡したいだけですか?
私は、すべての新しいコードが実際にARCを使用する必要があります(そしてARCはキャスティングの問題がより一般的です)ので、私はARCとみなします。
CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;
上記のコードは、現在のコンテキストで使用することができるNSArray*
にCF参照をキャスト。所有権の移転は行われていない。 someArrayRef
には参照がまだ残っていますが、手動でsomeArrayRef
を手動でリリースする必要があります。
CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);
このコードでは、キャストを取得するだけでなく、所有権の移譲も取得できます。 someArrayRef
は参照を保持しなくなりましたので、手動で解放する必要はありません。代わりに、array
が解放されると、オブジェクトはdeallocになります(他の場所では他の参照がないと仮定します)。
ありがとうございます!私は今しよう! – user1574429
コピーする必要はありません。無料のブリッジキャストは文字通り 'NSArray * myNsArray =(NSArray *)myCfArray;' – jjv360
です。これは非ARCコードでのみ機能します。 –