【问题标题】:What exactly is super in Objective-C?Objective-C 中的 super 到底是什么?
【发布时间】:2011-03-06 22:32:24
【问题描述】:

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

有人吗?

【问题讨论】:

    标签: objective-c super objective-c-runtime


    【解决方案1】:

    super

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

    对于 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 是原始的、未修改的类。有点。有时。 “这很复杂。”
    • "gritty" "details" - 链接失效
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这不适用于类方法。
      【解决方案4】:

      what is a meta class?getting subclassesclasses and metaclasses 上的这些博客帖子可能会让您对此内部机制有所了解。

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 2016-11-06
        相关资源
        最近更新 更多