0

重複の可能性:
Objective-C のセレクターは、オブジェクトにメッセージを送信する別の方法ですか?

セレクターに関する Apple のドキュメントを読みましたが、セレクターが必要な理由がわかりません。

私が理解できる限り、セレクターは関数ポインターと同等です。そうですか?

4

2 に答える 2

3

セレクターは、オブジェクトのメソッド実装を取得するために使用されます。

たとえば、ほとんどすべてのオブジェクトはdescription、スーパークラスから実装を継承している場合でも、メソッドを実装します。関数ポインタは、の1つの特定の実装のみを指すことができますdescription(たとえば、NSStringのバージョンまたはNSNumberのバージョンのみを指すことができますが、両方を指すことはできません)。1つのクラスのdescription実装の関数ポインターを取得してすべてのクラスに使用することはできませんが、同じdescriptionセレクターを使用できます。また、ターゲットとして使用するオブジェクトに関係なく、適切なメソッド実装が常に使用されます。

于 2012-07-15T21:03:01.433 に答える
1

セレクターは関数ポインターではありません。

セレクターは、一意のアドレス メソッド識別子 (メッセージ名) です。これらは、メッセンジャー関数 (objc_msgSend_*()) を高速にするために必要です。セレクターはメモリ内に一意のアドレスを持っているため、メソッド名を検索するときに、メッセンジャーは毎回かなり高価な文字列比較を行う必要はありません。であるため、単純なポインタ比較で十分です。

于 2012-07-15T20:43:51.087 に答える