iOS corefoundation与foundation的桥接问题

在ARC环境下,编译器是不会处理c语言申请的内存,

在C语言和OC混合开发的时候,C语言指针和oc的指针相互转换的时候,使用桥接.


__bridge__transfer  将coreDatafoundation对象给了foundation,并且移交了对象管理权,不需要release;(foundation中使用coreDatafoundation)/CFBridgingRelease

__bridge                  只是将coreDatafoundation对象给了foundation,并没有移交了对象管理权,需要release;

(foundation中使用coreDatafoundation)


__bridge__retained  (corefoundation 中使用foundation)




    /**

     CoreFoundationFundation框架的桥接 : 3种方式

     1. __bridge  : 可以将CF对象转换成了Foiundation对象,但是没有移交对象的所有权

     2. __bridge_transfer / CFBridgingRelease : 可以将CF对象转换成了Foiundation对象,同时移交对象的所有权

     3. __bridge_retained : 可以将Foiundation对象转换成了CF对象.这种方式使用几率非常低

     */

    

    //方式一:先转换成CF  CF ---> NS  CFRelease

//    CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);

//    CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);

//    

//    NSString *firstNameStr = (__bridge NSString *)(firstName);

//    NSString *lastNameStr = (__bridge NSString *)(lastName);

//    

//    NSLog(@"firstNameStr: %@", firstNameStr);

//    NSLog(@"lastNameStr: %@",lastNameStr);

//    

//    //CF框架没有ARC机制

//    

//    CFRelease(firstName);

//    CFRelease(lastName);

    

    

    // 方式二: 直接转换成NSString

//    NSString *firstNameStr = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));

//    NSString *lastNameStr = CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty));

    

    // 方式三: 直接转换成NSString

    NSString *firstNameStr = (__bridge_transferNSString *)ABRecordCopyValue(person,kABPersonFirstNameProperty);

    NSString *lastNameStr = (__bridge_transferNSString *)ABRecordCopyValue(person,kABPersonLastNameProperty);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值