2011-12-31 5 views
1

私は現在、CFSetCreateMutable()で作成されたNSMutableSetを探しています。ドキュメントでは、戻り値CFSetCreateMutable()はフリーダイヤルです。つまり、NSMutableSetにキャストするだけです。これは、releaseメッセージを送信することが完全に有効であることを意味しますか? NSクラスを使ってallocであるかのようにいつも私がいつもそのようなオブジェクトを扱うことができると私はいつも思っていますか?フリーダイヤルブリッジオブジェクト、保持および解放

答えて

7

は、[[NSMutableSet alloc] init]と同じことを想像してください。というのも、完了したらオブジェクトを解放する必要があるからです。 ARCを使用している場合は、ブリッジキャストを使用して、CFMutableSetをNSMutableSetにキャストできます。(__bridge_transfer NSMutableSet *)theCFSet。これは、範囲外になった後にセットをリリースすることをARCに指示します。

+0

基本的に、フリーダイヤルのブリッジとは、「すべての目的と目的で同等」を意味しますか?ニース!悲しいことに、私はiOS 4に展開する必要があるので、私はARCを使用できません。ああ、メモリ管理の面倒な作業をするならば、少なくともそれをも​​っと深く理解することになります。 C++!) –

1

ドキュメントでは、CFSetCreateMutable()の戻り値はフリーダイヤルです。つまり、単純にNSMutableSetにキャストできます。これは、リリースメッセージを送信することが完全に有効であることを意味しますか?

はい。 This is explicitly guaranteed in the docs

注意メモリ管理機能および方法はまた、Core FoundationのオブジェクトとのCocoaオブジェクトとreleaseautoreleaseCFReleaseを使用することができ、あなたが交換可能であることを例から。


アム私は常に安全は、彼らはNS-クラスを経由してalloc'edたかのように、私はいつもこのようなオブジェクトを扱うことができることを前提としていますか?

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

関連する問題