簡體   English   中英

免費橋接陷阱

[英]Toll free bridging gotchas

NS和CF類型之間是否有任何關於免費橋接的問題?

我不確定我做錯了但是我似乎無法在NS Array中使用CF opaque類型,如ABAddressID。

沒有太多'陷阱'。 但這是一種基於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的具體子類。請參閱在你的應用程序中集成Carbon和Cocoa有關免費橋接的更多信息。“

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

希望有所幫助,

--Tom

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM