再续 Xcode 4.2 中的Automatic Reference Counting (ARC)

上一篇转载文章中,提到了id--void*类型不能隐形转换,需要显性调用.但是文章中都没有说怎么显性转换.

一下午找了N多文档,试验了N多次.找到了正确的调用,可是就是编译不过去,刚刚在apple Developper Forums中看到了类似情况.才知道是xcode4.2的版本没有跟上.造成的某些宏找不到,编译报错.

现在说下ARC开启时,id和void*显性转换.

id objc_unretainedObject(CFTypeRef cf);   (void * ==> id,无需单独release)

 id objc_retainedObject(CFTypeRef cf);  (void * ==> id,需单独release,或使用__weak,如不释放可能造成leak)

CFTypeRef objc_unretainedPointer(id obj); (id ==> void *,CFTypeRef只是obj的一个引用.)

ARC开启时,coreFoundation Type和Foundation类显性转换.(也就是cf type和ns类的转换)

在没有开启ARC时,可以进行强制转换.

在这里引入了3个宏,和__strong,__weak用法一样的(用时放的位置).

__bridge,__bridge_retain,__bridge_transfer,这主要是cf和ns转换用.

__bridge,ARC没有进行retain操作

__bridge_retain,ARC进行retain操作

__bridge_transfer,ARC在操作结束后,进行release操作.类似__weak吧.

看文档说不建议用后2个..容易搞的混淆了..


id my_id;

CFStringRef my_cfref;

NSString *a = (__bridge NSString*)my_cfref;

CFStringRef b = (__bridge CFStringRef)my_id;


英文好的自己看下苹果官方文档

这是一个概括了解ARC的网站

LLVM关于ARC的介绍.个人感觉比apple的有用,详细

苹果官方文档pdf版(附件是pdf的,但是论坛有格式限制.就改成gif的了,图片另存为再改名就好了)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值