問題タブ [toll-free-bridging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2985 参照

objective-c - CFIndex を NSInteger に変換する

この質問は私の質問に似ていますが、回答が含まれていません。CFIndexを に変換したいNSInteger。フリーダイヤルのブリッジングを行うタイプのリストを確認しましたが、これはそれらの 1 つではありません。

0 投票する
2 に答える
618 参照

objective-c - ARCでのNSFastEnumerationオブジェクトのキャスト

カスタム クラスでNSFastEnumerationcountByEnumeratingWithState:objects:count:プロトコルのメソッドを実装しようとしています。

これまでのところ、オブジェクトを正しく反復処理していますが、返されるオブジェクトは Objective-C オブジェクトではなく、コアとなる基盤の同等物です。

state->itemsPtr を設定するコードの一部を次に示します。

MyCustomCollection.m

次に、このように「for..in」ループを別の場所で呼び出します

SomeOtherClass.m

コンソール出力は次のとおりです。

ご覧のとおり、NSFastEnumeration プロトコル メソッド内では、オブジェクトは正常に出力されますが、キャストされるとすぐにid __unsafe_unretained *、元の Objective-C 対応クラスが失われます。

正直なところ(__unsafe_unretained id *)(__bridge void *)、この場合のキャスティングがどのように機能するかはよくわかりません。は(__unsafe_unretained id *)、適切なタイプの itemsPtr のニーズに一致するようにキャストされているようです。は(__bridge void *)、obj-c ワールドを CF ワールドにブリッジするために使用される __bridge を使用して、タイプ void のポインターにキャストするようです。llvm docsに従って、次の場合__bridge:

所有権の譲渡はなく、ARC は保持操作を挿入しません。

あれは正しいですか?

私の理解では、__NSCFConstantString は NSString に相当するコア基盤にすぎません。また、ARC では、Objective-C オブジェクトから同等の CoreFoundation オブジェクトにブリッジする必要があることも理解しています。これは、ARC が後者のメモリを管理する方法を知らないためです。

「for..in」ループ内のオブジェクトが元のタイプになるようにするにはどうすればよいですか?

また、この場合、コレクションに NSStrings を追加していますが、理論的にはすべてのオブジェクトをサポートする必要があることに注意してください。

アップデート

ロブの答えは正しい軌道に乗っていますが、その理論をテストするために、for ループを次のように変更しました。

理論的には、オブジェクトは同等であるため機能するはずですが、次のエラーでクラッシュします。

ループで返されるオブジェクトは、forインスタンスではなくクラスのように見えます。ここで何か他のことが間違っているかもしれません...これについて何か考えはありますか?

更新 2: ソリューション

次のように簡単です: (CodaFi のおかげで

0 投票する
1 に答える
43029 参照

objective-c - ARC で NSString から CFStringRef へ、および CFStringRef から NSString へ?

ARCNSStringからを取得する正しい方法を理解しようとしていますか? CFStringRef反対方向に行く場合も同じでCFStringRefNSStringARC に移動しますか?

メモリリークを発生させずにこれを行う正しい方法は何ですか?

0 投票する
1 に答える
450 参照

callback - OS X と FSEvents: FSEventStreamRef に提供されたコールバック ポインタをどのように解放しますか?

FSEvents を使用してディレクトリを監視しています。ディレクトリが変更されるたびに、FSEventStreamRef の FSEventStreamContext に最初に渡したブロックを呼び出します。ディレクトリの監視を停止するときにブロックを解放するにはどうすればよいですか? 参考までに以下のコード。

0 投票する
1 に答える
287 参照

objective-c - CF 以外のタイプの ARC に出入りするために、一致する CFBridging 呼び出しを使用しても安全ですか?

userDataChipmunk 物理エンジンを使用してゲームを作成しています。Objective-C オブジェクトへのポインターをすべてのボディフィールドに格納したいと考えています。idと の間でキャストするにはブリッジング キャストを使用する必要があることはわかっていますがvoid *、その方法が安全かどうかはわかりません。

CFBridging*()このコードは機能しているように見えますが、Core Foundation 型に無料でブリッジできるオブジェクトでのみ使用することになっていることも読みました。はからUserData派生したものNSObjectであり、無料のブリッジ タイプNSObjectのリストに含まれていないため、そのルールを破っているようです。

最終的に呼び出しCFBridgingReleaseてオブジェクトを他の Core Foundation 関数に渡そうとしないため、コードは問題ありませんか、または C 内外で Objective-C オブジェクトを転送する別の方法がありますか?

0 投票する
1 に答える
3928 参照

objective-c - ARC: contextInfo テスト ケースを使用した __bridge と __bridge_retained の比較

次の ARC コードを検討してください。

質問: 7 行目で、 を__bridge使用する必要がありますか、 または__bridge_retained、またはそれは問題ではありませんか、それとも文字列の保持カウント (つまり、文字列が明示的に割り当てられているか、 のようなクラス初期化子を介して自動解放されているか) に依存します+[NSString stringWithString:]か?

0 投票する
5 に答える
10112 参照

objective-c - Swift での無料のブリッジングとポインター アクセス

アプリを Objective-C から Swift に移植していますが、次の方法を使用する必要があります。

古いロジックは次のようになります (いくつかの Web サイトが同意しているようです)。

フリーダイヤルのブリッジングのおかげで、これはうまく機能します。ただし、「Swift-space」には ARC が存在せず、型システムが変更されています。

ストリームをインスタンスに変換するにはどうすればよいですか

そして、呼び出しNSStream後にそれらをサブクラスに変換しますか?CFStreamCreatePairWithSocketToHost