美文网首页
Swift静态 派发和动态派发

Swift静态 派发和动态派发

作者: 牛奶红茶 | 来源:发表于2021-04-12 17:20 被阅读0次


    1.静态派发机制同时支持值类型引用类型

    然而,动态派发机制仅支持引用类型比如Class,简而言之:对于动态性或者动态派发,我们需要用到继承特性,而这是值类型不支持的

    首先全面了解一下,由4种派发机制,而不是两种(静态和动态)

    1.内联(inline)(最快)

    2.静态派发(Static Dispatch)

    3.函数表派发(Virtual Dispatch)

    4.动态派发(Dynamic Dispatch)(最慢)

    由编译器决定应该使用哪种派发技术,当然有限选择内联函数,然后按需选择

    静态派发VS动态派发

    Objective-C默认支持动态派发,中华和钟派发技术以多态的形式为开发人员提供了灵活性,比如子类可以重写父类的方法,这很棒,然而这也是需要付出代价的

    动态派发以一定量的运行时开销为代价,提高了语言的灵活性,这意味着,在动态派发机制下,对于每个方法的调用,编译器必须在方法列表中查找执行方法的实现,编译器需要判断调用方,是选择父类的实现,还是子类的实现,而且由于所有对象的内存都是在运行时分配的,因此编译只能在运行时执行检查,

    而静态调用,则没有这个问题,在编译期的时候,编译器就知道要为某个方法调用某种实现,因此,编译器可以执行某些优化,甚至在可能的情况下,可以将某些代码转成inline函数,从而使整体执行速度异常快

    2.如何在swift中实现动态派发和静态派发

    ->要实现动态派发,我们可以使用继承,重写父类的方法,另外我们可以使用dynamic关键字,并且需要在@objc关键字前面加上关键字,以便将方法公开给OC runtime使用

    ->要实现静态派发,我们可以使用final和static关键字,保证不会被覆盖

    相关文章

      网友评论

          本文标题:Swift静态 派发和动态派发

          本文链接:https://www.haomeiwen.com/subject/iwrxlltx.html