web-dev-qa-db-ja.com

Objective-Cの正確なところは何ですか?

私の知る限り、これはスーパークラスへのポインタです。これはスーパークラスに固定されており、実行時に動的に把握されません。もっと詳しく知りたい...

誰でも?

48

super

基本的に、現在のクラスのスーパークラスの実装を使用できます。

Objective-Cランタイムの grittydetails の場合:

[super message]の意味は次のとおりです。

メソッド呼び出しを検出すると、コンパイラーは、objc_msgSend、objc_msgSend_stret、objc_msgSendSuper、またはobjc_msgSendSuper_stretのいずれかの関数への呼び出しを生成します。オブジェクトのスーパークラスに送信されるメッセージ(superキーワードを使用)は、objc_msgSendSuperを使用して送信されます。その他のメッセージは、objc_msgSendを使用して送信されます。戻り値としてデータ構造を持つメソッドは、objc_msgSendSuper_stretおよびobjc_msgSend_stretを使用して送信されます。

つまり、それは静的であり、not実行時に決定されます。

46
Ben S

これはselfと同等のキーワードですが、スーパークラスのメソッドテーブルを使用してメッセージディスパッチの検索を開始します。

29
Chuck

super is notクラスへのポインタ。スーパーはselfですが、メッセージ式で使用される場合、「スーパークラスのメソッドテーブルから始まる実装を探す」ことを意味します。

19
NSResponder

メタクラスとは?geting subclasses および classes and metaclasses に関するこれらのブログ投稿は、これの内部についていくらかの洞察を与えるかもしれません。

5
David Gelhar