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标志忽略指定的诊断?
感谢您的时间。
答案 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];
}