【问题标题】:ARC with CGColorRef带有 CGColorRef 的 ARC
【发布时间】:2012-09-20 05:46:25
【问题描述】:

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

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

【问题讨论】:

    标签: iphone automatic-ref-counting


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2012-08-20
      相关资源
      最近更新 更多