当前位置:  开发笔记 > 编程语言 > 正文

免费桥接陷阱

如何解决《免费桥接陷阱》经验,为你挑选了1个好方法。

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

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



1> Tom Andersen..:

没有太多'陷阱'.但这是一种基于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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有