bridge、bridge_retained、bridege_transfer

Core Foundation 和Cocoa Framework::Foundation的转化

用到的三个关键字:bridge、bridge_retained、bridege_transfer

bridege:

1、只做类型转化处理,对对象的所有权不做修改(对引用计数不做处理);
2、将Objective-C的对象类型用 __bridge 转换为 void* 类型和使用__unsafe_unretained (ARC下的weak)关键字修饰的变量是一样的。被代入对象的所有者需要明确对象生命周期的管理,不要出现异常访问的问题。

bridge_retained:

1、一般常用于OC类型转为CF类型;
2、转化后的CF对象引用计数+1;
(需要添加CFRelease方法对CF进行释放)

bridege_transfer:(隐性添加strong关键字修饰)

1、常用于CF类型转化为OC类型;
2、转化后自动将CF类型引用计数-1;
(不需要调用CFRelease方法释放CF指针)

一、需要特别明确被转换类型是否是 ARC 管理的对象

1、Core Foundation 对象类型不在 ARC 管理范畴内
Core Foundation是C语言接口,需要手动释放。(CFRelease)
2、 Cocoa Framework::Foundation 对象类型(即一般使用到的Objectie-C对象类型)在 ARC 的管理范畴内

二、如果不在 ARC 管理范畴内的对象,那么要清楚 release 的责任应该是谁

你可能感兴趣的:(bridge、bridge_retained、bridege_transfer)