为什么[超级]和[自我]产生相同的结果?

use*_*951 11 objective-c

-(NSString *) nibName
{
    PO([self class]);
    PO([super class]);
    PO([self superclass]);
Run Code Online (Sandbox Code Playgroud)

[self superclass]产生实际的超类.

[self class]: BGImageForBizs
[super class]: BGImageForBizs
[self superclass]: BGUIImageWithActivityIndicator
Run Code Online (Sandbox Code Playgroud)

ric*_*ter 10

使用发送消息super与发送消息相同self,但显式使用超类的方法实现.但是你的类可能没有实现-class方法本身,所以你已经-class从你的超类继承了它的实现.

实际上,你可能继承了它NSObject的实现-class(即使NSObject不是你的直接超类; -class也不是经常被覆盖的方法).默认实现只返回对象isa指针的内容,告诉你Class它是什么.

换句话说,重要的是要认识到调用super不会将对象完全转换为其超类的实例; 它只运行该方法的超类代码.如果在该代码中有任何内省,它仍然将您的对象视为它开始的任何类的实例.


Cat*_*Man 9

自我和超级是同一个对象.super所做的唯一事情是控制调用该方法的哪个实现.由于您的类和超类都使用NSObject的-class实现,因此在两种情况下都会调用相同的方法.

  • 哎呀,11分钟太慢了!这是我通过 iPhone 回答问题得到的结果。第一个答案很好。:) (2认同)