51

私の知る限り、これはスーパークラスへのポインターです。これはスーパークラスに組み込まれており、実行時に動的に把握されるわけではありません。詳しく教えていただきたいです...

誰?

4

4 に答える 4

49

super

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

Objective -C ランタイムの詳細については、次を参照してください。

[super message]次の意味があります。

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

はい、静的であり、実行時に決定されません。

于 2010-06-22T17:05:48.797 に答える
29

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

于 2010-06-22T17:09:05.437 に答える
20

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

于 2010-06-22T17:11:12.300 に答える
6

メタ クラスとは何かに関するこれらのブログ投稿 、サブクラスクラスとメタクラスを取得すると、これの内部についての洞察が得られる場合があります。

于 2010-06-22T17:13:07.117 に答える