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

【ARC下OC对象和CF对象之间的桥接】在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 = https://www.it610.com/article/(__bridge_transfer NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
需要将CF对象转化为OC对象,并且需要ARC自动管理内存,这种情况下,就需要用__bridge_transfer来进行桥接.

    推荐阅读