Tekkaman

导航

 

Objective-C指针与CoreFoundation指针之间的转换

  ARC仅管理Objective-C指针(retain、release、autorelease),不管理CoreFoundation指针,CF指针由人工管理,手动的CFRetain和CFRelease来管理,注,CF中没有autorelease。

  CocoaFoundation指针与CoreFoundation指针转换,需要考虑的是所指向对象所有权的归属。ARC提供了3个修饰符来管理。

  1. __bridge,什么也不做,仅仅是转换。此种情况下:

    i). 从Cocoa转换到Core,需要人工CFRetain,否则,Cocoa指针释放后, 传出去的指针则无效。

    ii). 从Core转换到Cocoa,需要人工CFRelease,否则,Cocoa指针释放后,对象引用计数仍为1,不会被销毁。

  2. __bridge_retained or CFBridgingRetain,arc把对象所有权转出,需CoreFoundation处理。

  3. __bridge_transfer or CFBridgingRelease,CoreFoundation把对象所有权交给arc,由arc自动处理。

示例

posted on 2012-05-02 14:14  Tekkaman  阅读(2245)  评论(0编辑  收藏  举报