-(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
发送消息 using与发送消息super
相同self
,但显式使用超类的方法实现。但是你的类可能没有实现-class
方法本身,所以你已经-class
从你的超类继承了实现。
实际上,您可能正在继承NSObject
的实现-class
(即使NSObject
不是您的直接超类;-class
也不是经常被覆盖的方法)。而默认实现只是返回对象isa
指针的内容,告诉你Class
它是什么。
换句话说,重要的是要认识到调用super
不会将您的对象完全转换为其超类的实例。它只是运行该方法的超类代码。如果该代码中正在进行任何自省,它仍然会将您的对象视为它开始时的任何类的实例。
self 和 super 是同一个对象。super 唯一要做的就是控制调用该方法的哪个实现。由于您的类和超类都使用 NSObject 的 -class 实现,因此在两种情况下都会调用相同的方法。