在ARC上将CALayer的内容设置为iOS上的CGImageRef

时间:2011-12-20 15:35:09

标签: objective-c cocoa-touch calayer automatic-ref-counting cgimageref

以下代码可以通过手动内存管理进行编译,但在ARC下失败:

CALayer *layer = [CALayer layer];
layer.contents = [[UIImage imageNamed:@"dial.png"] CGImage];

错误是:

  

自动引用计数问题:a的隐式转换   非Objective-C指针类型'CGImageRef'(又名'struct CGImage *')来   ARC不允许使用'id'

如何使用ARC运行?

2 个答案:

答案 0 :(得分:18)

CoreFoundation对象不由ARC管理。 ARC仅适用于Objective-C对象,并且在从非对象指针类型转换(或转换)时不会隐式知道如何转移所有权。

您需要告诉ARC如何在演员阵容期间转移对象的所有权:

layer.contents = (__bridge id) [[UIImage imageNamed:@"dial.png"] CGImage];

答案 1 :(得分:1)

只是将-CGImage的结果转换为id,因为它抱怨隐式转换......

layer.contents = (id) [[UIImage imageNamed:@"dial.png"] CGImage];