2011-09-27 36 views
3

我有一個關鍵字不被複制的字典的要求。這導致了我快樂的舞蹈,並且我已經結束了CFMutableDictionary的大門。NSMutableDictionary vs CFMutableDictionary

我想了解它們可以互換的程度。在蘋果公司的文檔進行CFMutableDictionary他們的狀態:

在你看到一個NSMutableDictionary *參數的方法

,您可以 通在CFMutableDictionaryRef,並在功能在那裏你看到一個 CFMutableDictionaryRef參數,你可以在傳遞 NSMutableDictionary實例。

但我想知道是否有可能將CFMutableDictionary轉換爲NSMutableDictionary並調用NSMutableDictionary的方法,並且在某些情況下,您可以;

如果我使用CFDictionaryCreateMutable()創建CFMutableDictionary並將其轉換爲NSMutableDictionary。

我可以打電話:

[cfDictionaryCastToNSDictionary objectForKey:someKey] 

我也可以撥打:

[cfDictionaryCastToNSDictionary setObject:someObject forKey:someKey] 

...這將複製鍵或拋出一個異常,如果它沒有實現NSCopying。我也可以使用for循環遍歷它的值。

但是如果我打電話:

[cfDictionaryCastToNSDictionary count] 

我得到一個異常。

我的問題是在這裏引發了什麼? Apple文檔沒有提到能夠通過強制轉換爲NSDictionary來調用CFMutableDictionary中不存在的某些方法。

+0

如果您的目標是桌面Cocoa,請查看'NSPointerArray'。 –

+0

你會得到哪個例外?調用'count'應該可以很好地工作。 – DarkDust

+0

不幸的是我的目標是移動。我很震驚,沒有什麼像NSPointerArray可用。 – Undistraction

回答

3

如果您希望瞭解使用免費橋接的問題,您應該從Mike Ash的"Toll-Free Bridging Internals"開始,然後從那裏開始。

如果你只是想回去工作,答案是,不要這樣做;通過使用CFDictionary的CF函數而不是免費的橋接來完全避免這個問題。如果字典純粹在內部使用,那麼CFDictionary API應該足以做任何你想做的事情。

+0

感謝您的鏈接。 – Undistraction