-3

これは私が現在行っていることです:

ブリッジングを行うとき、基本的に私はこれらの2つのルールを持っています

CF ランドから NS ランドに変換、CFBridgingRelease を使用 NS ランドから CF ランドに変換、__bridge を使用。

Apple のサンプル コードが別の方法で実行されているのを見たことがありません。

以下にサンプルを示します。

ABRecordRef ABWhatIsThis= (__bridge ABRecordRef)([self.allMyContacts objectAtIndex:indexPath.row]);

NSString * strName= CFBridgingRelease (ABRecordCopyCompositeName (ABWhatIsThis));

理由は、NS ランドから CF ランドに何かを変換したい場合、所有権を変更したくないからです。ARC は NS ランドのリテイン カウントを維持し、CF ランドのオブジェクトを NS ランドのカウンター パーツが破壊されるまで存続させます。

それが私が使用した理由ですABRecordRef ABWhatIsThis= (__bridge ABRecordRef)

CF ランドから NS ランドに何かを変換する場合は、CFBridgingRelease を使用します。その理由は、CFBridging を指す ARC オブジェクトを取得したら、CFBridging でそれらを保持する必要がないからです。

しかし、私はまだ混乱しています。CFBridgingRelease をいつ使用すべきかという厳しい規則はありますか?

また、CFBridging のようなものがないことに気付きました。CFBridgingRelease と CFBridgingRetain のみ。なぜアンバランスなのか気になります。

4

1 に答える 1

0

__bridge所有権の譲渡なしで、Objective-C と Core Foundation の間でポインターを転送します。

__bridge_retainedまたはCFBridgingRetain、Objective-C ポインターを Core Foundation ポインターにキャストし、所有権をユーザーに譲渡します。この関数を使用して、Objective-C オブジェクトを Core Foundation スタイルのオブジェクトとしてキャストし、オブジェクトの所有権を取得して、その有効期間を管理できるようにします。その後オブジェクトを解放する責任があります

于 2013-03-28T09:07:22.943 に答える