2

メッセージ/セレクターに応答しない可能性のあるオブジェクトにメッセージを送信しようとするたびに、これを手動で確認する必要があるのはなぜですか? メッセージが送信されるたび、または performSelector: またはこのメッセージのバリアントが呼び出されるたびに、言語がチェックを実行できないのはなぜですか。これにより、無効なメッセージの送信によるすべてのクラッシュが解消されます。

これを行うのは非効率的ですか?

4

1 に答える 1

3

すべてのメソッド呼び出しにビルトイン チェックがないのには、いくつかの正当な理由があります。まず、かなり非効率的です。しかし、より重要なことは、ほとんどの場合、既知のメソッドのみを呼び出す必要があるため、チェックの必要がないことです。

しかし、実行時にチェックしたい理由はさまざまです。オプションのメソッドを含むプロトコルが主なケースです。異なるバージョンの API を使用することも、よくある理由の 1 つです。新しいメソッドは、時間の経過とともに追加または削除されます。

間違いと、存在するかもしれないし存在しないかもしれないメソッドを呼び出していることを知っていることとの違いを見分けることができる必要があります。間違いの場合は、失敗と例外が必要です。メソッドがオプションの場合、実行時チェックを実行して、存在しない場合に呼び出しをスキップできるようにする必要があります。

于 2013-05-21T06:28:27.987 に答える