У меня есть требование к словарю с ключами, которые не копируются. Это привело меня к веселому танцу, и я оказался у дверей CFMutableDictionary.
Я пытаюсь понять, насколько они взаимозаменяемы. В документах Apple для CFMutableDictionary они утверждают:
в методе, где вы видите параметр NSMutableDictionary *, вы можете
передать в CFMutableDictionaryRef и в функцию, где вы видите
Параметр CFMutableDictionaryRef, вы можете передать в
Экземпляр NSMutableDictionary.
Но мне было интересно, можно ли привести CFMutableDictionary к NSMutableDictionary и вызвать для него методы NSMutableDictionary, и в некоторых случаях кажется, что это возможно;
Если я создаю CFMutableDictionary с помощью CFDictionaryCreateMutable () и приведу его к NSMutableDictionary.
Я могу позвонить:
[cfDictionaryCastToNSDictionary objectForKey:someKey]
Я также могу позвонить:
[cfDictionaryCastToNSDictionary setObject:someObject forKey:someKey]
... который скопирует ключ или вызовет исключение, если он не реализует NSCopying. Я также могу перебирать его значения, используя цикл for.
Однако, если я позвоню:
[cfDictionaryCastToNSDictionary count]
Я получаю исключение.
У меня вопрос, что именно здесь происходит под капотом? Документация Apple нигде не упоминает о возможности вызова некоторых методов, которые не существуют в CFMutableDictionary, путем приведения к NSDictionary.