9

重複の可能性:
CFArrayRef を NSMutableArray にする方法

この質問については非常に多くの情報があることは知っていますが、すべての答えは「これは簡単です。無料のブリッジとしてキャストできます」であり、実際のソースコードについては言及されていません。フリーダイヤルのブリッジとキャストの意味を知っています。「CFArrayRef を NSArray に変換する方法は?」という正確なソース コードを知りたいです。. どなたかお願いします!!!!!!!!

4

2 に答える 2

40

ルールが少し変わるので、最初にARCを使用しているかどうかを知る必要があります。次に、キャストで実際に何をしたいのかを知る必要があります。値を使用するだけですか、それとも所有権を譲渡しますか?

IMO、すべての新しいコードは実際にはARCを使用する必要があるため(ARCはキャストの問題がより一般的である)、ARCを想定します。

CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;

上記のコードはNSArray*、現在のコンテキストで使用できるにCF参照をキャストします。所有権の譲渡は行われていません。 someArrayRefまだ参照を保持しているため、手動で解放する必要があります。そうしないと、someArrayRefリークが発生します。

CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);

このコードでは、キャストを取得するだけでなく、所有権を譲渡します。 someArrayRef参照を保持しなくなったため、手動で解放する必要はありません。代わりに、arrayリリース時に、オブジェクトは割り当てを解除します(他の場所に他の参照がないと仮定します)。

于 2012-09-05T16:03:08.713 に答える
5

あなたはそれをキャストできるはずです:

CFArrayRef *myLegacyArray = ...

...

NSArray *myArray=[(NSArray *)myLegacyArray copy];
于 2012-09-05T15:52:47.163 に答える