美文网首页
iOS中[super class]为何会输出子类类型

iOS中[super class]为何会输出子类类型

作者: 廖丹_18be | 来源:发表于2017-11-24 14:46 被阅读25次

比如有一个自定义类DetailViewController继承自类UIViewController。那么我们对这个自定义类分别使用[self class]和[super class]将会分别输出如下结果:

[self class] [super class]
DetailViewController DetailViewController

1. 问题?

按照面向对象的思维, [super class] 应该会输出父类类型也就是UIViewController,而从结果可以看到这两个输出都是一样的,那这是什么原因导致的呢?

我们知道实际上在iOS中,对方法的调用是通过发送消息来完成的。也就是说使用 [self class] 时,会使用obj_msgSend(id theReceiver, SEL selector, ...)函数向Receiver来发送消息。而使用 [super class] 时,会使用obj_msgsendSuper(...)函数向Receiver来发送消息。

2. 分析

1). 然而obj_msgSend(...)obj_msgSendSuper(...)中Receiver都是self,这里的self也就是DetailViewController

2). [self class]和[super class]都会找到 NSObject中class方法

3). 当[super class]找到NSObject中的class方法以后,仍然会使用obj_msgSend(receiver, @selector(class))函数,因为receiver不变,所以输出的结果仍旧是DetailViewController

[super class]找到NSObject中class方法以后,reciever不变实际上是因为super只是一个“编译器指示符”,它和self指向的是相同的receiver。

作者:Muiz
链接:http://www.jianshu.com/p/ee0fb7f289b2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。</pre>

相关文章

网友评论

      本文标题:iOS中[super class]为何会输出子类类型

      本文链接:https://www.haomeiwen.com/subject/fuqfbxtx.html