-(NSString *) nibName
{
PO([self class]);
PO([super class]);
PO([self superclass]);
のみが[self superclass]
実際のスーパークラスを生成します。
[self class]: BGImageForBizs
[super class]: BGImageForBizs
[self superclass]: BGUIImageWithActivityIndicator
-(NSString *) nibName
{
PO([self class]);
PO([super class]);
PO([self superclass]);
のみが[self superclass]
実際のスーパークラスを生成します。
[self class]: BGImageForBizs
[super class]: BGImageForBizs
[self superclass]: BGUIImageWithActivityIndicator
を使用してメッセージを送信することsuper
は、にメッセージを送信することと同じですがself
、スーパークラスのメソッド実装を明示的に使用します。-class
ただし、クラスはおそらくメソッド自体を実装していないため-class
、スーパークラスからの実装をすでに継承しています。
実際、あなたはおそらくNSObject
の実装を継承しているでしょう-class
(たとえNSObject
あなたの直接のスーパークラスでなくて-class
も、頻繁にオーバーライドされるメソッドではありません)。また、デフォルトの実装では、オブジェクトのisa
ポインタの内容が返され、それが何であるかが示されますClass
。
つまり、呼び出しsuper
によってオブジェクトがそのスーパークラスのインスタンスに完全に変換されるわけではないことを認識することが重要です。そのメソッドのスーパークラスのコードを実行するだけです。そのコードでイントロスペクションが行われている場合でも、オブジェクトは最初のクラスのインスタンスとして認識されます。
selfとsuperは同じオブジェクトです。スーパーが行う唯一のことは、メソッドのどの実装が呼び出されるかを制御することです。クラスとスーパークラスの両方がNSObjectの-classの実装を使用しているため、どちらの場合も同じメソッドが呼び出されます。