swift - Swift 中的协议见证表和 vtable 有什么区别?
问题描述
我试图了解 swift 的 vtable 和见证表之间的区别。从理论上讲,它应该是允许动态分派类方法的相同机制。SIL 的文档包含两个段落,表明它们不同。但这对我来说有点混乱。
那么,这两者之间究竟有什么区别呢?
解决方案
根据我的理解,您所说的 vtables 允许动态调度类方法。这些表是在编译时生成的。
另一方面,见证表允许泛型类型的动态分派,因此该表是不同的,因为它需要映射泛型条目以实现相同的结果:动态分派。这些表包含编译器用来“生成运行时调度表”的信息。该信息未在编译时定义。如果您在文档中查看见证表映射基本协议、它所需的方法以及它的关联类型和它的协议一致性(关联类型)。
不确定我是否正确理解了您的问题?
推荐阅读
- javascript - Vue-portal 条件门户是否启用?
- ios - Swift CollectionView 滚动出界
- python - 循环两个列表并使用 pandas python 查找匹配的元素
- image-processing - 如何为服务器启用 AVIF 支持
- laravel - 网络错误:React Native、Axios、Laravel - 身份验证
- java - 这种后增量何时发生?
- python - 如何链接 django 自定义用户模型和 django allauth 包
- javascript - React - 将应用程序嵌入现有页面(Web 服务器中的子文件夹)
- php - Laravel 7 Admin Guard Login 仅适用于第一个管理员用户
- gradle - 如何将源代码文件添加为源文件中的构建依赖项和/或访问定义?