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 に答える