Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么[super class]和[self class]会产生相同的结果?_Objective C - Fatal编程技术网

Objective c 为什么[super class]和[self class]会产生相同的结果?

Objective c 为什么[super class]和[self class]会产生相同的结果?,objective-c,Objective C,只有[self superclass]生成实际的超类 -(NSString *) nibName { PO([self class]); PO([super class]); PO([self superclass]); 自我和超是同一个对象。super所做的唯一事情就是控制调用方法的哪个实现。由于您的类和超类都使用NSObject的-class实现,因此在这两种情况下都会调用相同的方法。使用super发送消息与将消息发送到self相同,但显式使用超类的方法实现。但是您

只有
[self superclass]
生成实际的超类

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

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

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

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


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

我不知道Obj-C,但闻起来也像是虚拟的方法:啊,11分钟太慢了!这就是我在iPhone上回答问题的结果。好的第一个答案。:)
[self class]: BGImageForBizs
[super class]: BGImageForBizs
[self superclass]: BGUIImageWithActivityIndicator