码迷,mamicode.com
首页 > 其他好文 > 详细

OC对象与Core Foundation对象的转换

时间:2015-07-21 17:19:27      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:objective-c   内存   

OC对象使用了ARC,自动释放内存,但是CF中的对象没有ARC,必须要手动进行引用计数和内存释放.

两者对象之间的互相转换有三种形式:

1.__bridge:

直接转换,部改变对象的持有状况:

id obj = [NSObject new];
cfObject = (_bridge cfObject) obj;
//不改变对象持有状况,cf对象不能获得obj的引用.
id obc = (__bridge id)cfObject;
//但obc是强引用,是被__strong修饰的,必定获得cf对象的强引用.

2.CFBridgingRetain 和 __bridge_retained:

转换得到的CF对象获得一个强引用,引用计数加1,需要人工的使用CFRelease来释放CF对象:

cfobject = CFBridgingRetain(obj);
//cfoject具有强引用,必须使用手工释放
CFRelease(cfobject);


3.CFBridgingReleasing和__bridge_transfer:

将cf对象赋值给id时,释放CF对象本身的引用:

id obj = (__bridge_transfer id)cfObject;
//id拥有一个强引用,但cfObject本身的引用已经被释放了.



版权声明:本文为博主原创文章,未经博主允许不得转载。

OC对象与Core Foundation对象的转换

标签:objective-c   内存   

原文地址:http://blog.csdn.net/luo_xianming/article/details/46986329

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!