ARC与CGColorRef

时间:2012-09-20 05:46:26

标签: iphone automatic-ref-counting

我仍然习惯了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));

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

1 个答案:

答案 0 :(得分:6)

只需使用gradientLayer.backgroundColor = [UIColor clearColor].CGColor;,因为.CGColor已经是CGColorRef。您的上一个代码执行了从CGColorRefid的转换。