使用ARC,我无法再转换CGColorRef
为id
。我了解到我需要进行桥接。根据c文件:
一桥连投是C样式转换标注有三个关键字之一:
(__bridge T) op
将操作数强制转换为目标类型T
。如果T
是可保留对象指针类型,则op
必须具有不可保留指针类型。如果T
是不可保留的指针类型,则op必须具有可保留的对象指针类型。否则,演员表的格式不正确。没有所有权转移,并且ARC不插入保留操作。
(__bridge_retained T) op
将必须具有可保留对象指针类型的操作数强制转换为必须是不可保留指针类型的目标类型。ARC保留该值,但要对本地值进行通常的优化,并且接收方负责平衡+1。
(__bridge_transfer T) op
将必须具有不可保留的指针类型的操作数强制转换为必须是可保留的对象指针类型的目标类型。ARC将在封闭的全表达式结束时释放该值,但要对本地值进行通常的优化。这些转换是必需的,以便在ARC控制中进出对象。请参阅有关可保留对象指针的转换部分的基本原理。
仅使用a
__bridge_retained
或__bridge_transfer
cast来说服ARC分别发出不平衡的保留或释放是不好的形式。
我会在哪种情况下使用它们?
例如,CAGradientLayer
具有一个colors
接受CGColorRef
s 数组的属性。我的猜测是我应该__brige
在这里使用,但是不清楚为什么应该(或者不应该)。