【问题标题】:suppressing "incompatible pointer types sending 'subclassA' to parameter of type 'subclassB' " clang抑制“不兼容的指针类型将'subclassA'发送到'subclassB'类型的参数”
【发布时间】:2012-08-07 22:14:04
【问题描述】:

Xcode 引发“不兼容的指针类型将 'subclassA' 发送到 'subclassB' 类型的参数”警告。用clang编译。

在引发警告的情况下,我使用一个

[subclassA isKindOfClass: [subclassB class]] ... 

以确保兼容的指针使用。我想要类似的东西:

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    // warning-raising code
    #pragma clang diagnostic pop

但要提出适当的警告。 IE。忽略指定诊断的 clang 标志是什么?

感谢您的宝贵时间。

【问题讨论】:

  • 挖出泥土:你想静音的警告是"-Wincompatible-pointer-types"

标签: ios xcode clang


【解决方案1】:

如果我没听错的话,你会说类似

if ([subclassA isKindOfClass:[subclassB class]]) {
    [foo someMethodThatWantsSubclassB:subclassA];
}

这里的修复是在成功的类型断言之后强制转换subclassA。您的情况有点奇怪,因为您动态确定 subclassB 的类型而不是测试静态类型,但在方法 -someMethodThatWantsSubclassB: 中您肯定知道所涉及的类型,所以您会写类似

if ([subclassA isKindOfClass:[subclassB class]]) {
    [foo someMethodThatWantsSubclassB:(BClass)subclassA];
}

如果您有一些非常奇怪的设置,您实际上并不知道 subclassB 的静态类型(尽管我无法想象这里的情况),您可以简单地转换为 (id) 而不是摆脱警告:

if ([subclassA isKindOfClass:[subclassB class]]) {
    [foo someMethodThatWantsSubclassB:(id)subclassA];
}

【讨论】:

  • 是的,这是一个非常奇怪的设置 - 结果我的计划很差。投射到 (id) 解决了问题.. 愚蠢的我。以前从来没有这样做过!感谢阅读/回复!非常感谢!
  • @Z.O.:我对设置很好奇。即使你在编译时不知道subclassB 的类,你也应该知道-someMethodThatWantsSubclassB: 期望的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多