正如我们所知,在免费桥接类型和 Objective-c 类型(例如CFArrayRef
和)之间进行转换非常容易NSArray
。昨天,我发现了一段代码可以将CGImageRef
(不是免工具桥接类型)转换id
为如下:
CALayer *imgLayer = [CALayer layer];
imgLayer.contents = (id)aImage.CGImage;
但是,它工作正常。但我不明白,因为CGImageRef
根据苹果的文档,它不属于免费桥接类型。看第二行代码,imgLayer
应该保留赋值给属性内容的值。因为CGImageRef
被转换为id
所以我认为在属性内容的 setter 方法中,它会像这样向该对象发送保留消息[xxx retain]
。但aImage.CGImage
不是一个对象,所以我认为这个保留消息不会正确执行(但它会)。所以我的问题是这种转换背后的实际行动是什么?