抑制“不兼容的指针类型将'subclassA'发送到'subclassB'类型的参数”clang

时间:2012-08-07 22:14:04

标签: ios xcode clang

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

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

感谢您的时间。

1 个答案:

答案 0 :(得分: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];
}