【发布时间】:2011-03-06 22:32:24
【问题描述】:
据我所知,它是一个指向超类的指针。它与超类硬连接,而不是在运行时动态计算出来。想详细了解一下...
有人吗?
【问题讨论】:
标签: objective-c super objective-c-runtime
据我所知,它是一个指向超类的指针。它与超类硬连接,而不是在运行时动态计算出来。想详细了解一下...
有人吗?
【问题讨论】:
标签: objective-c super objective-c-runtime
本质上,它允许您使用当前类的超类的实现。
对于 Objective-C 运行时的gritty details:
[super message]的含义如下:
当遇到方法调用时, 编译器生成对其中之一的调用 函数 objc_msgSend, objc_msgSend_stret,objc_msgSendSuper, 或 objc_msgSendSuper_stret。留言 发送到对象的超类(使用 super 关键字)发送使用 objc_msgSendSuper;其他消息是 使用 objc_msgSend 发送。方法 将数据结构作为返回值 使用 objc_msgSendSuper_stret 发送 和 objc_msgSend_stret。
所以是的,它是静态的,不是在运行时确定的。
【讨论】:
super 在类别中的行为很奇怪(或“正常”,如果你这么认为的话)。也就是说,它将类别视为子类(而不是覆盖),因此super 是原始的、未修改的类。有点。有时。 “这很复杂。”
这是一个等效于self 的关键字,但它使用超类的方法表开始其消息调度搜索。
【讨论】:
super 不是指向类的指针。 super 是self,但是在消息表达式中使用时,它的意思是“从超类的方法表开始寻找实现”。
【讨论】:
what is a meta class?、getting subclasses 和 classes and metaclasses 上的这些博客帖子可能会让您对此内部机制有所了解。
【讨论】: