__bridge, __bridge_transfer和__bridge_retained 的使用

Core Foundateion是C语言的接口,Foundation是OC的接口,有ARC来管理内存,Core Foundation需要自己管理内存。 涉及到Core Foundation的结构体转化到Foundation的对象或者反过来的时候,需要用到上述3个关键字。

__bridge,CF和OC对象转化时,只涉及对象类型转化,不涉及所有权的转化。
讲一个OC对象转化成一个CF对象的时候,使用__bridge得到的CF对象不需要使用CFRelease释放,因为所有权还在OC这边,会通过ARC释放内存。
从形式上可以猜测,将OC对象转化成CF对象,其实是结构体指针,因为转化的结果都是CFXXXRef或者void*。

__bridge_transfer CF对象转化成OC对象的时候,将所有权交给ARC管理。此时也不需要调用CFRelease,因为__bridge_transfer会帮我们做这个事情。

__bridge_retained OC对象转化成CF对象的时候,将所有权交出,至此以后,这个对象的内存由开发者负责手动释放。

一个小技巧:在ARC的环境下获取对象的引用计数。 NSLog(@”Retain count is %ld”, CFGetRetainCount((__bridge CFTypeRef)myObject));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值