Я хотел бы упростить некоторые из моих сервисных кодов цепочки для ключей и использовать CFDictionarySetValue
с NSString
.
для Foundation. Декларация CFDictionarySetValue
выглядит так:
void CFDictionarySetValue(CFMutableDictionaryRef theDict, const void *key, const void *value)
что происходит, когда я передаю, например, @"This is a NSString"
для value
параметра?В моем случае компилятор не выдает предупреждение, а статический анализ ничего не ловит.Во время выполнения не происходит сбоев, поэтому это означает, что время выполнения заботится обо всем, или я должен передать [@"something" cStringUsingEncoding:NSUTF8StringEncoding]
и привести его к const void*
?
Мои результаты показывают, что:
NSLog(@"%s", CFDictionaryGetValue(query, kKeyForCStringInUTF8));
NSLog(@"%@", CFDictionaryGetValue(query, kKeyForNSString));
оба дают одинаковый вывод!Это сбивает с толку ...
Каково общее правило обмена объектами между CF и Foundation?Есть ли общепринятый стиль кода, хорошая практика?