2

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标志是什么?

谢谢你的时间。

4

1 回答 1

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];
}
于 2012-08-07T22:24:35.230 回答