2009-06-01 110 views
2

NS和CF類型之間是否存在免費橋接問題?免費橋接陷阱

我不知道如果我做錯了,但我似乎無法使用類似於AB陣列內的CF不透明類型。

+0

可以顯示一些代碼?我無法收集你的意思是「似乎無法使用......在NSArray內」。你不能將它們添加到數組中?一旦你做到了,你不能使用它們嗎? – catsby 2009-06-01 18:47:47

回答

8

沒有太多'陷阱'。但是這是一個基於C的語言,所以不是每個項目都是從CFType開始的。例如一個ABRecordID實際上只是一個32位整數。所以它不是CFType。要將ABRecordID添加到數組,您可以這樣做:

NSMutableArray * newArray = [NSMutableArray array];

ABRecordID someID = 24875247; //你可以在某處撥打電話

[newArray addObject:[NSNumber numberWithInt:someID]]; //如果希望回數通過將INT成一個NSNumber

再後來增加了一個ABRecordID到陣列:

ABRecordID thatID = [[newArray objectAtIndex:0]的intValue]; //檢索數字,然後詢問它的int值。

如果您閱讀了關於CFType的文檔,它會一直說它是否與某些NS *對應的橋接免費。

來自文檔的報價: 「CFNumber與Cocoa Foundation的對手NSNumber是」免費橋接「,這意味着Core Foundation類型在橋接Foundation對象的函數或方法調用中是可互換的。一個方法,你可以看到一個NSNumber *參數,你可以傳遞一個CFNumberRef,並且在一個你看到一個CFNumberRef參數的函數中,你可以傳遞一個NSNumber實例,這個事實也適用於NSNumber的具體子類。可可在您的申請中獲得更多有關免費橋接的信息。「

但是C中的int絕對不是CFNumber。

希望幫助,

--Tom

+0

謝謝湯姆 - 這對我有很大的幫助 – chaostheory 2009-06-02 03:56:33