• Swift


    final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作。Swift中,final关键字可以在class、func和var前修饰。
    通常大家都认为使用final可以更好地对代码进行版本控制,发挥更佳的性能,同时使代码更安全。下面对这些说法做个总结。

    1,想通过使用final提升程序性能 - 效果有限
    通常认为final能改成性能,因为编译器能从final中获取额外的信息,因此可以对类或者方法调用进行额外的优化处理。但这中优化对程序性能的提升极其有限。
    所以如果抱着提升性能的想法,就算把所有不需要继承的方法、类都加上final关键字,也没多大作用。还不如花时间去优化下程序算法。

    2,final正确的使用场景 - 权限控制
    也就是说这个类或方法不希望被继承和重写,具体情况如下:

    (1)类或者方法的功能确实已经完备了
    这种通常是一些辅助性质的工具类或者方法,特别那种只包含类方法而没有实例方法的类。比如MD5加密类这种,算法都十分固定,我们基本不会再继承和重写。

    (2)避免子类继承和修改造成危险
    有些方法如果被子类继承重写会造成破坏性的后果,导致无法正常工作,则需要将其标为final加以保护。

    (3)为了让父类中某些代码一定会执行
    父类的方法如果想要其中一些关键代码在继承重写后仍必须执行(比如状态配置、认证等)。我们可以把父类的方法定义成final,同时将内部可以继承的部分剥离出来,供子类继承重写。下面通过一段代码演示:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    class Parent {
        final func method1() {
            //权限验证(必须执行)
            //.....
             
            method2()
             
            //下面是日志记录(必须执行)
            //..........
        }
         
        func method2(){
            //父类的实现
            //......
        }
    }
     
    class Child : Parent {
        //只能重写父类的method2方法,不能重写method1方法
        override func method2() {
            //子类的实现
            //......
        }
    }
  • 相关阅读:
    公司技术部与其他部门之间的那些事儿
    5万元百元大钞的"渣渣钱"重新拼接的软件方面的解决办法的思路。
    公司技术部门内部的发展变化过程。
    手机开发与360的那点事儿
    通用快排
    被中断的函数
    setjmp与longjmp
    setjmp在非主函数中调用
    array and structure
    check your input
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4843839.html
Copyright © 2020-2023  润新知