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

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

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

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

于 2013-02-07T03:06:16.750 回答
9

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

于 2013-02-07T02:55:02.127 回答