CGColorRef
强制转换为id
。我了解到需要执行桥接强制转换。根据Clang文档的说明:引用式强制转换是一种带有以下三个关键字之一的C样式强制转换:
(__bridge T) op
将操作数转换为目标类型T
。如果T
是可保留的对象指针类型,则op
必须具有不可保留的指针类型。如果T
是不可保留的指针类型,则op
必须具有可保留的对象指针类型。否则,该转换是非法的。没有所有权的转移,ARC不插入任何保留操作。(__bridge_retained T) op
将操作数(必须具有可保留的对象指针类型)转换为目标类型(必须是不可保留的指针类型)。ARC保留该值,但受本地值上的通常优化限制,并且接收方负责平衡+1。(__bridge_transfer T) op
将操作数(必须具有不可保留的指针类型)转换为目标类型(必须是可保留的对象指针类型)。ARC将在封闭完整表达式的末尾释放该值,但受本地值上的通常优化限制。
__bridge_retained
或__bridge_transfer
强制转换来说服ARC分别发出不平衡的保留或释放是不恰当的。应在哪些情况下使用每个强制转换?
例如,
CAGradientLayer
具有接受CGColorRef
数组的colors
属性。我猜应该在这里使用__bridge
,但为什么应该使用(或不使用)不清楚。