gpt4 book ai didi

swift - 为什么静态分派(dispatch)这么快

转载 作者:行者123 更新时间:2023-11-28 09:49:02 25 4
gpt4 key购买 nike

我知道类中有一个方法列表。而且我也知道动态调度的机制。但我混淆了静态调度。 Where are static methods in。静态方法是否在全局哈希表中。以及静态调度如何工作。流程是什么样的。

最佳答案

您混淆了两个不同的概念。

静态调度是指在运行时调用方法体的方式。如果你有一个可能有子类的类或任何你知道它符合特定协议(protocol)的对象,你必须使用动态调度,这意味着你必须在表中查找方法的地址(称为 vtable 或见证表)然后跳转到该位置。如果编译器确切地知道它有什么样的对象,例如一个struct,一个final类或者类中的一个final方法,它知道这个方法不能被重写,因此可以直接跳转到它的地址不进行查找。

声明为static 的方法是类型方法。它将在类型本身而不是类型的实例上调用,即在方法内部 self 指的是类型而不是类型的实例。

static 方法不能被重写,所以编译器总是在编译时知道地址,并将为它们使用静态分派(dispatch)。不需要任何类型的哈希表或见证表。

关于swift - 为什么静态分派(dispatch)这么快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com