相关疑难解决方法(0)

ARC和桥接演员

有了ARC,我不能再投CGColorRefid.我了解到我需要做一个桥接演员.据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在这里使用,但究竟为什么我应该(或不应该)不清楚.

objective-c type-conversion clang automatic-ref-counting

165
推荐指数
3
解决办法
8万
查看次数