ARC with CGColorRef



我仍然习惯了ARC和桥接转换。 我在关于CGColor的文档中看到了这个

编译器处理从 Cocoa 方法返回的 CF 对象 编译器理解返回核心基础的Objective-C方法 类型遵循历史上的可可命名约定(请参阅高级 内存管理编程指南)。例如,编译器知道 在 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 的编译器警告,需要使用桥转换。 我仍然不明白为什么。 当我点击"修复它"时,它给了我这个:

gradientLayer.backgroundColor = (__bridge CGColorRef)((__bridge id)([UIColor clearColor].CGColor));

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

只需使用 gradientLayer.backgroundColor = [UIColor clearColor].CGColor; .CGColor已经是CGColorRef了。您的上一个代码从CGColorRef转换为id,然后再返回。

最新更新