3

コピーされていないキーを持つ辞書が必要です。これは私を陽気なダンスに導き、CFMutableDictionary のドアにたどり着きました。

それらがどの程度互換性があるかを理解しようとしています。Apple の CFMutableDictionary のドキュメントでは、次のように述べています。

NSMutableDictionary * パラメータが表示されるメソッドでは、CFMutableDictionaryRef を渡すことができ、CFMutableDictionaryRef パラメータが表示される関数では、NSMutableDictionary インスタンスを渡すことができます。

しかし、CFMutableDictionary を NSMutableDictionary にキャストし、その上で NSMutableDictionary のメソッドを呼び出すことができるかどうか疑問に思いました。場合によってはできるようです。

CFDictionaryCreateMutable() を使用して CFMutableDictionary を作成し、それを NSMutableDictionary にキャストするとします。

私は呼び出すことができます:

[cfDictionaryCastToNSDictionary objectForKey:someKey]

私はまた呼び出すことができます:

[cfDictionaryCastToNSDictionary setObject:someObject forKey:someKey]

...キーをコピーするか、NSCopying を実装していない場合は例外を発生させます。for in ループを使用して、その値を反復処理することもできます。

しかし、私が電話した場合:

[cfDictionaryCastToNSDictionary count]

例外があります。

私の質問は、ボンネットの下で正確に何が起こっているのですか? Apple のドキュメントでは、NSDictionary にキャストすることで CFMutableDictionary に存在しないメソッドを呼び出すことができるとはまったく言及されていません。

4

1 に答える 1

3

無料のブリッジングを使用して問題を理解しようとしている場合は、Mike Ash の「Toll-Free Bridging Internals」から始めて、そこから進んでください。

仕事に戻りたいだけなら、そうしないでください。フリーダイヤルのブリッジではなく、CFDictionary で CF 関数を使用することにより、問題を完全に回避します。CFDictionary API は、ディクショナリが純粋に内部で使用されている場合、何をしようとしても十分に実行できるはずです。

于 2011-09-27T19:05:51.490 に答える