有了ARC,我不能再投CGColorRef给id.我了解到我需要做一个桥接演员.据clang docs说:
一个桥接投是C样式转换标注有三个关键字之一:
(__bridge T) op将操作数强制转换为目标类型T.如果T是可保留对象指针类型,则op必须具有不可保留的指针类型.如果T是不可保留的指针类型,则op必须具有可保留的对象指针类型.否则演员阵容不合理.没有所有权转让,ARC不会保留任何保留操作.
(__bridge_retained T) op将必须具有可保留对象指针类型的操作数强制转换为目标类型,该目标类型必须是不可保留的指针类型.ARC保留该值,取决于对本地值的通常优化,并且接收方负责平衡+1.
(__bridge_transfer T) op将操作数(必须具有不可保留的指针类型)强制转换为目标类型,该目标类型必须是可保留的对象指针类型.ARC将在封闭的完整表达式的末尾释放值,这取决于对本地值的通常优化.为了将对象传入和传出ARC控制,需要这些演员表; 请参阅有关可保留对象指针转换一节的基本原理.
纯粹使用
__bridge_retained或__bridge_transfer铸造来说服ARC分别发出不平衡的保留或释放,这种形式很差.
我会在什么样的情况下使用它们?
例如,CAGradientLayer有一个colors接受CGColorRefs 数组的属性.我的猜测是我应该__brige在这里使用,但究竟为什么我应该(或不应该)不清楚.