11
-(NSString *) nibName
{
    PO([self class]);
    PO([super class]);
    PO([self superclass]);

のみが[self superclass]実際のスーパークラスを生成します。

[self class]: BGImageForBizs
[super class]: BGImageForBizs
[self superclass]: BGUIImageWithActivityIndicator
4

2 に答える 2

10

を使用してメッセージを送信することsuperは、にメッセージを送信することと同じですがself、スーパークラスのメソッド実装を明示的に使用します。-classただし、クラスはおそらくメソッド自体を実装していないため-class、スーパークラスからの実装をすでに継承しています。

実際、あなたはおそらくNSObjectの実装を継承しているでしょう-class(たとえNSObjectあなたの直接のスーパークラスでなくて-classも、頻繁にオーバーライドされるメソッドではありません)。また、デフォルトの実装では、オブジェクトのisaポインタの内容が返され、それが何であるかが示されますClass

つまり、呼び出しsuperによってオブジェクトがそのスーパークラスのインスタンスに完全に変換されるわけではないことを認識することが重要です。そのメソッドのスーパークラスのコードを実行するだけです。そのコードでイントロスペクションが行われている場合でも、オブジェクトは最初のクラスのインスタンスとして認識されます。

于 2013-02-07T03:06:16.750 に答える
9

selfとsuperは同じオブジェクトです。スーパーが行う唯一のことは、メソッドのどの実装が呼び出されるかを制御することです。クラスとスーパークラスの両方がNSObjectの-classの実装を使用しているため、どちらの場合も同じメソッドが呼び出されます。

于 2013-02-07T02:55:02.127 に答える