2009-06-01 66 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