我仍然习惯了ARC和桥牌演员。我在关于CGColor
的文档中看到了这一点编译器处理从Cocoa方法返回的CF对象 编译器理解返回Core Foundation的Objective-C方法 类型遵循历史Cocoa命名约定(请参阅高级 内存管理编程指南)。例如,编译器知道 在iOS中,由UIColor的CGColor方法返回的CGColor是 不拥有。如图所示,您仍必须使用适当的类型转换 通过这个例子:
NSMutableArray *colors = [NSMutableArray arrayWithObject:(id)[[UIColor darkGrayColor] CGColor]];
[colors addObject:(id)[[UIColor lightGrayColor] CGColor]];
所以在我的代码中,我尝试了这个:
gradientLayer.backgroundColor = (id)([UIColor clearColor].CGColor));
我收到了关于ARC的编译器警告,需要使用桥接转换。我还是不明白为什么。当我点击“Fix-It”时,它给了我这个:
gradientLayer.backgroundColor = (__bridge CGColorRef)((__bridge id)([UIColor clearColor].CGColor));
我不明白。这是什么意思?谢谢!
答案 0 :(得分:6)
只需使用gradientLayer.backgroundColor = [UIColor clearColor].CGColor;
,因为.CGColor
已经是CGColorRef
。您的上一个代码执行了从CGColorRef
到id
的转换。