以下代码可以通过手动内存管理正常编译,但在 ARC 下失败:
CALayer *layer = [CALayer layer];
layer.contents = [[UIImage imageNamed:@"dial.png"] CGImage];
错误是:
自动引用计数问题:ARC 不允许将非 Objective-C 指针类型“CGImageRef”(又名“struct CGImage *”)隐式转换为“id”
如何使用 ARC 运行它?
以下代码可以通过手动内存管理正常编译,但在 ARC 下失败:
CALayer *layer = [CALayer layer];
layer.contents = [[UIImage imageNamed:@"dial.png"] CGImage];
错误是:
自动引用计数问题:ARC 不允许将非 Objective-C 指针类型“CGImageRef”(又名“struct CGImage *”)隐式转换为“id”
如何使用 ARC 运行它?
CoreFoundation 对象不由 ARC 管理。ARC 仅适用于 Objective-C 对象,并且在从(或向)非对象指针类型转换时不隐式知道如何转移所有权。
您需要告诉 ARC 对象的所有权在演员阵容中是如何转移的:
layer.contents = (__bridge id) [[UIImage imageNamed:@"dial.png"] CGImage];
只需将结果-CGImage
转换为 id,因为它抱怨隐式转换......
layer.contents = (id) [[UIImage imageNamed:@"dial.png"] CGImage];