1

我还在习惯 ARC 和桥牌。我在有关 CGColor 的文档中看到了这一点

编译器处理从 Cocoa 方法返回的 CF 对象 编译器理解返回核心基础类型的 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));

我不明白。这是什么意思?谢谢!

4

1 回答 1

6

只需使用gradientLayer.backgroundColor = [UIColor clearColor].CGColor;as.CGColor已经是CGColorRef. 您的最后一个代码进行了从 aCGColorRef到 a 的强制转换id

于 2012-09-20T06:03:21.097 回答