• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS Swift结构体与类的方法调度

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前言

hello,小伙伴们:在忙碌中闲暇之余给大家聊聊swift的知识点,今天给大家带来的是swift中结构体与类的方法调度详细区别,希望对你有所帮助,好了废话不用多说,接下来步入主题!

 

1.普通方法时两者方法调度的区别

● 结构体中的普通方法调度是静态派发的方式
   ○ 详细分析会在以后: 方法调度之普通结构体方法 阐述
● 类中的普通方法是以函数派发的方式去调度的。
   ○ 详细分析会在以后:方法调度之普通方法 阐述

2.协议中两者方法调度的区别

● 以类/结构体直接声明的,
  ○ 结构体:方法调度都是静态调度
  ○ 类:方法调度都是函数调度
● 以协议类型声明的, 无论协议的实现是类还是结构体:
  ○ 方法最初定义在协议本身内, 则方法以协议函数表的方式调度
  ○ 方法最初定义在协议延展内, 则方法以静态派发的方式调度

3.extension对类中方法调度的影响

extension PersonClass {
    func changClassName10() {}
}

 SIL代码:

 

 

断点,汇编跟踪一下:

 

可以看到 changClassName10 这个方法在执行的时候,由function_ref修饰,sil_vtable 中的函数列表里面没有。在编译时已经确定了函数的地址,运行时,直接执行。所以延展内的方法是静态派发。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift网络封装库Moya中文手册之Endpoints发布时间:2022-07-13
下一篇:
Swift语言Auto Layout入门教程:上篇发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap