为什么将CGImageRef转换为对象指针不需要内存管理信息(__bridge等)?例如,如果 image 的类型为UIImage *,而 layer 是UIView的底层,则以下代码行不会引起编译器的任何抱怨:
layer.content = (id)[image CGImage];
答案 0 :(得分:6)
引用Transitioning to ARC Release Notes:
编译器处理从Cocoa方法返回的CF对象
编译器了解返回Core Foundation的Objective-C方法 类型遵循历史Cocoa命名约定(see Advanced Memory Management Programming Guide)。例如,编译器知道 在iOS中,由UIColor的CGColor方法返回的CGColor是 不拥有。如图所示,您仍必须使用适当的类型转换 通过这个例子......
(好吧,不太可可,但是嘿!)。
因为CGImage返回一个CoreFoundation对象,所以不需要__bridge
强制转换。