51

据我所知,它是一个指向超类的指针。它与超类硬连线,而不是在运行时动态计算出来。想详细了解一下...

任何人?

4

4 回答 4

49

super

本质上,它允许您使用当前类的超类的实现。

关于Objective -C 运行时的细节:

[super message]具有以下含义:

当遇到方法调用时,编译器生成对函数 objc_msgSend、objc_msgSend_stret、objc_msgSendSuper 或 objc_msgSendSuper_stret 之一的调用。发送到对象超类的消息(使用 super 关键字)使用 objc_msgSendSuper 发送;其他消息使用 objc_msgSend 发送。使用 objc_msgSendSuper_stret 和 objc_msgSend_stret 发送具有数据结构作为返回值的方法。

所以是的,它是静态的,而不是在运行时确定的。

于 2010-06-22T17:05:48.797 回答
29

它是一个等效于 的关键字self,但它从超类的方法表开始其消息调度搜索。

于 2010-06-22T17:09:05.437 回答
20

super不是指向类的指针Super 是self,但在消息表达式中使用时,它的意思是“从超类的方法表开始查找实现”。

于 2010-06-22T17:11:12.300 回答
6

这些关于什么是元类的博客文章?,获取子类类以及元类可能会让您对它的内部有所了解。

于 2010-06-22T17:13:07.117 回答