博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS corefoundation与foundation的桥接问题
阅读量:4290 次
发布时间:2019-05-27

本文共 1522 字,大约阅读时间需要 5 分钟。

在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);

转载地址:http://yhlgi.baihongyu.com/

你可能感兴趣的文章
判断两个链表是否相交并找出交点
查看>>
归并排序
查看>>
STL常见问题
查看>>
time_wait和close_wait状态
查看>>
STL中vector、list、deque和map的区别
查看>>
Linux下多线程查看工具(pstree、ps、pstack)
查看>>
PID PPID LWP NLWP
查看>>
查看线程CPU占用情况
查看>>
查看个线程的CPU 内存占用
查看>>
Fiddler 教程
查看>>
apache 设置用户注意事项
查看>>
svn中设置文件夹链接
查看>>
find ./ -name "*.cgi" |xargs -i cp "{}" ./cgi-bin/
查看>>
svn st | awk '{if ( $1 == "?") { print $2}}' | xargs svn add
查看>>
mysql事务处理用法与实例详解
查看>>
利用iptables来配置linux禁止所有端口登陆和开放指定端口
查看>>
Python模块——struct
查看>>
mysql中select * for update
查看>>
linux vmstat 1 ,watch , pmap -p,
查看>>
MYSQL 相关
查看>>