码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 8:【转】CoreFoundation 和 NSObject 在 ARC 下的转换

时间:2014-12-28 00:27:24      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

源地址:http://fann.im/blog/2013/12/25/corefoundation-bridge-nsobject/

CoreFoundation 有自己的引用计数处理方法,在 CF 下如果生成对象的方法中有 create、retain、copy 就表示 CF 会用自己的方式对引用计数加一,这就需要在结束的时候用 CFRelease() 释放。而 ARC 目前只对 NSObject 对象有自动的引用计数处理,所以在 ARC 如果有 CoreFoundation 对象和 NSObject 对象转换就需要用 __bridge__bridge_transfer__bridge_retained 进行引用计数管理的转换。

  • __bridge 表示 CF 对象和 NSObject 的引用计数平衡,无需转换管理权。适用于用不包含 create、retain、copy 的方法获取的 CF 对象转换为 NSObject。
  • __bridge_transfer 表示将 CF 对象的引用计数管理员转移到 NSObject 由 ARC 管理,无需再用 CFRelease() 释放。
  • __bridge_retained 表示将 NSObject 对象的引用计数管理权转移到 CF 管理,并且引用计数加一,那么在 CF 层就需要用 CFRelease() 释放该对象。

SDK 有两个宏 CFBridgingRetainCFBridgingRelease 可以直接用,要注意 CFBridgingRetain 后要用 CFRelease() 释放。

// After using a CFBridgingRetain on an NSObject, the caller must take responsibility for calling CFRelease at an appropriate time.
NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetain(id X) {
    return (__bridge_retained CFTypeRef)X;
}

NS_INLINE id CFBridgingRelease(CFTypeRef CF_CONSUMED X) {
    return (__bridge_transfer id)X;
}

参考 ARC工程转换和开发注意事项

iOS 8:【转】CoreFoundation 和 NSObject 在 ARC 下的转换

标签:

原文地址:http://www.cnblogs.com/michaellfx/p/4189443.html

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