ARC下OC对象和CF对象之间的桥接

2016-08-23  本文已影响0人  我是小银

在iOS中,由于ARC不能够管理CoreFoundation object的生命周期,那么对于CFObject和NSObject之间的转换问题,我们需要用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字.对于这个转换,不是太懂,借鉴一下别人写的.

1.对于__bridge关键字,制作类型转换,但是不修改对象管理权.  

2.对于__bridge_retained将ObjectIve-C的对象转化为CoreFundation对象,同事将对象的管理权交给我们,后续需要使用CFRelease或者相关的方法来释放对象.

3.对于__bridge_transfer,将CoreFoundation的对象转化为Objective-c的对象,同时将对象的管理权交给ARC.这个时候ARC就能自动管理内存.

例如,在获取通讯录的时候,

//1.获取联系人

ABRecordRef person = CFArrayGetValueAtIndex(allPeopleArray, i);

//2.获取姓名

NSString *lastName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);

NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);

//3.获取头像的数据

NSData *imageData = (__bridge_transfer NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);

需要将CF对象转化为OC对象,并且需要ARC自动管理内存,这种情况下,就需要用__bridge_transfer来进行桥接.

上一篇下一篇

猜你喜欢

热点阅读