1

私は現在NSMutableSet、関数によって作成されたものを見ていますCFSetCreateMutable()。ドキュメントには、の戻り値はCFSetCreateMutable()フリーダイヤルブリッジであると記載されています。つまり、単純ににキャストできますNSMutableSetreleaseこれは、メッセージの送信が完全に有効であることを意味しますか?allocそのようなオブジェクトをNSクラスを介して処理されたかのように常に扱うことができると私は常に安全だと思いますか?

4

2 に答える 2

7

CFSetCreateMutable()[[NSMutableSet alloc] init]と同等であると想像してみてください。オブジェクトを使い終わったら、オブジェクトを解放する必要があります。ARCを使用している場合は、ブリッジキャストを使用してCFMutableSetをNSMutableSetにキャストできます(__bridge_transfer NSMutableSet *)theCFSet。これにより、ARCは、スコープ外になった後にセットを解放する責任があることを通知します。

于 2011-12-31T20:48:34.567 に答える
1

ドキュメントには、CFSetCreateMutable() の戻り値は無料でブリッジされていると記載されています。つまり、単純に NSMutableSet にキャストできます。これは、リリース メッセージの送信が完全に有効であることを意味しますか?

はい。これはドキュメントで明示的に保証されています:

この例からわかるように、メモリ管理関数とメソッドも交換可能ですCFRelease。Cocoa オブジェクトとreleaseCore autoreleaseFoundation オブジェクトを使用できます。


そのようなオブジェクトを NS クラスを介して割り当てられたかのように常に扱うことができると仮定しても安全ですか?

そうではありません:現在-description、 /などの CFType と NSObject の間に共通に存在するものCFCopyDescriptionはすべて、オブジェクトの作成方法に関係なく機能しますが、メモリ管理メッセージのように機能することがすべて明示的に保証されているわけではありません。

于 2012-01-01T06:25:31.653 に答える