オブジェクトを使用するselector
と、コンパイル時にわからないメソッドを呼び出すことができます。メソッドを呼び出すには、メソッドの名前だけを文字列として知っている必要があります。
呼び出しているメソッドの名前がコンパイル時にわかっている場合、セレクターを使用すると逆効果になります。コードが読みにくくなり、明らかな利点がなくなります。ライブラリとは別にコンパイルされた他のコードでメソッドを呼び出す必要があるライブラリを作成している場合、セレクターは2つのコードを分離する方法を提供します。
たとえば、時間間隔が過ぎたときにコールバックできるタイマークラスを作成している場合、タイマーは呼び出す必要のある関数の名前を知らないため、次のようなものを作成することはできません。
// We do not know if the function is called intervalHasExpired or something else
[target intervalHasExpired];
ただし、タイマーにセレクターを指定すると、タイマーがコールバックできるようになります。
[myTimer scheduleWithTarget:self andSelector:@selector(myCompletion)];