Objective-C指针与CoreFoundation指针之间的转换
简介
在程序中,如果要在Foundation和CoreFoundation两大框架中掺杂使用,那么可以使用bridge桥接。
ARC仅仅管理Objective-C指针(retain、release、autorelease、alloc、copy、new等),但是不管理CoreFoundation指针所指对象内存的释放,所以CF指针有手动管理,如果嫌麻烦可以使用CFRetain和CFRelease来管理。
使用
CocoaFoundation指针与CoreFoundation指针转换,需要考虑的是所指向对象所有权的归属。ARC提供了3个修饰符来管理。
_ _bridge,什么也不做,仅仅是转换。此种情况下:
i ). 从Cocoa转换到Core,需要人工CFRetain,否则,Cocoa指针释放后, 传出去的指针则无效。
ii ).从Core转换到Cocoa,需要人工CFRelease,否则,Cocoa指针释放后,对象引用计数仍为1,不会被销毁。_ _bridge_retained,转换后自动调用CFRetain,即帮助自动解决上述i的情形。
_ _bridge_transfer,转换后自动调用CFRelease,即帮助自动解决上述ii的情形。