免费桥接陷阱

时间:2009-06-01 17:56:34

标签: iphone objective-c

NS和CF类型之间是否有任何关于免费桥接的问题?

我不确定我做错了但是我似乎无法在NS数组中使用CF opaque类型,如ABAddressID。

1 个答案:

答案 0 :(得分: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的具体子类。有关收费的更多信息,请参阅在你的应用程序中集成Carbon和Cocoa。免费桥接。“

但是C中的int绝对不是CFNumber。

希望有所帮助,

- 汤姆