我想簡化一些鑰匙串服務代碼,並使用CFDictionarySetValue
和Foundation的NSString
。如何在CoreFoundation函數中正確使用Foundation的NSString?
的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之間交換對象的一般規則是什麼?是否有普遍接受的代碼風格,是一種好的做法?
好吧,我決定不「簡化」代碼正如我上面所建議的。對象互操作性是這樣做的,所以我可以堅持'NSMutableDictionary'。 – matm 2012-01-17 09:47:27