-(NSString *) nibName
{
PO([self class]);
PO([super class]);
PO([self superclass]);
只有[self superclass]
才会产生实际的超类。
[self class]: BGImageForBizs
[super class]: BGImageForBizs
[self superclass]: BGUIImageWithActivityIndicator
答案 0 :(得分:10)
使用super
发送消息与将其发送到self
相同,但显式使用超类的方法实现。但是你的类本身可能没有实现-class
方法,所以你已经从你的超类继承了-class
的实现。
事实上,您可能会继承NSObject
-class
的实施(即使NSObject
不是您的直接超类; -class
不是方法经常被覆盖)。默认实现只返回对象的isa
指针的内容,告诉你Class
是什么。
换句话说,重要的是要认识到调用super
并不会将对象完全转换为其超类的实例;它只运行该方法的超类代码。如果在该代码中有任何内省,它仍然将您的对象视为它开始的任何类的实例。
答案 1 :(得分:9)
self和super是同一个对象。 super所做的唯一事情是控制调用该方法的哪个实现。由于您的类和超类都使用NSObject的-class实现,因此在两种情况下都会调用相同的方法。