LLVM 3.0 编译器错误:将 C 指针类型转换为 Objective-C 指针类型“id”;需要桥接演员

发布于 2024-11-26 08:12:44 字数 443 浏览 1 评论 0原文

我正在尝试使用新的 LLVM 3.0 编译器编译旧的 iPhone 应用程序项目。 我收到此错误:

自动引用计数问题:将 C 指针类型“CGColorRef”(又名“struct CGColor *”)转换为 Objective-C 指针类型“id”需要桥接转换 [4]

对于代码:

UIColor *color1, *color2, *color3, *color4;

....

NSArray *colors =  [NSArray arrayWithObjects:(id)color1.CGColor, color2.CGColor, color3.CGColor, nil];

此代码在较旧的 LLVM GCC 4.2 编译器中编译没有问题。 其原因何在? 迁移到 LLVM 3.0 编译器时需要学习的最重要的事情是什么?

I am trying to compile old iPhone application project using new LLVM 3.0 compiler.
I am getting this error:

Automatic Reference Counting Issue: cast of C pointer type 'CGColorRef' (aka 'struct CGColor *') to Objective-C pointer type 'id' requires a bridged cast [4]

for code:

UIColor *color1, *color2, *color3, *color4;

....

NSArray *colors =  [NSArray arrayWithObjects:(id)color1.CGColor, color2.CGColor, color3.CGColor, nil];

This code compiles without problems in older LLVM GCC 4.2 compiler.
What is the cause of that?
What are the most important things to learn when migrating to the LLVM 3.0 compiler?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

埋情葬爱 2024-12-03 08:12:45

这是因为您正在使用编译器的 ARC 模式(自动引用计数)。为了让 ARC 成功地静态跟踪跨越免费桥梁(从 Foundation 到 Cocoa,反之亦然)的对象的引用计数,您需要告诉它您已经考虑了这种情况。一般来说,要么禁用 ARC,要么阅读有关强制转换的 ARC 文档< /a> 选择适当的解决方案。

然而,这里有一个更大的问题。 CGColorRefUIColorInstance.CGColor 的类型)不是免费桥接到 Cocoa 类型,因此不能安全地转换为 代码>id。为什么不只存储UIColor

This is because you're using the compiler's ARC mode (Automatic Reference Counting). For ARC to successfully statically track the reference count of objects that cross the toll-free bridges (Foundation to Cocoa and vice versa), you need to tell it that you've considered the situation. In general, either disable ARC or have a read of The ARC documentation about casts to pick the appropriate solution.

However, here you have a bigger problem. CGColorRef (the type of UIColorInstance.CGColor) is not toll-free bridged to a Cocoa type, and so cannot be safely cast to a id. Why not just store the UIColor?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文