8

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

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

错误是:

自动引用计数问题:ARC 不允许将非 Objective-C 指针类型“CGImageRef”(又名“struct CGImage *”)隐式转换为“id”

如何使用 ARC 运行它?

4

2 回答 2

18

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

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

layer.contents = (__bridge id) [[UIImage imageNamed:@"dial.png"] CGImage];
于 2011-12-20T15:48:42.887 回答
1

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

layer.contents = (id) [[UIImage imageNamed:@"dial.png"] CGImage];
于 2011-12-20T15:37:36.740 回答