美文网首页
ARC下OC对象和CF对象之间的桥接

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

作者: 我是小银 | 来源:发表于2016-08-23 15:45 被阅读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来进行桥接.

    相关文章

      网友评论

          本文标题:ARC下OC对象和CF对象之间的桥接

          本文链接:https://www.haomeiwen.com/subject/enlesttx.html