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

时间:2013-02-07 02:36:46

标签: objective-c

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

只有[self superclass]才会产生实际的超类。

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

2 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:9)

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