コピーされていないキーを持つ辞書が必要です。これは私を陽気なダンスに導き、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 に存在しないメソッドを呼び出すことができるとはまったく言及されていません。