2

オブジェクトで必ずしもサポートされていないメソッドを呼び出す必要がある状況がありますが、同時に、メソッドに渡すことができる引数の種類が制限されるため、performSelector を使用できません。したがって、私はこれを行います:

if ([someObject respondsToSelector:@selector(someMethod)])
    [(id)someObject someMethod];

コンパイラは満足しています。私も満足していますが、このメッセージ送信方法に注意点はありますか?

同期バージョンの performSelector と上記の本質的な違いは何ですか?

編集: (id) メソッドと比較して、performSelector を使用するとパフォーマンスが低下しますか?

4

1 に答える 1

7

ここでは特に注意事項はありません。にキャストするidことで、コンパイラ時のチェックを破棄していますが、とにかくperformSelector:.

ARC を使用している場合、コンパイラはsomeMethod.

于 2014-03-06T18:14:16.333 に答える