Swift - final关键字的介绍,以及使用场景

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

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

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

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

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

(3)为了让父类中某些代码一定会执行
父类的方法如果想要其中一些关键代码在继承重写后仍必须执行(比如状态配置、认证等)。我们可以把父类的方法定义成final,同时将内部可以继承的部分剥离出来,供子类继承重写。下面通过一段代码演示:

class Parent {
    final func method1() {
        //权限验证(必须执行)
        //.....

        method2()

        //下面是日志记录(必须执行)
        //..........
    }

    func method2(){
        //父类的实现
        //......
    }
}

class Child : Parent {
    //只能重写父类的method2方法,不能重写method1方法
    override func method2() {
        //子类的实现
        //......
    }
}

转载自http://www.cnblogs.com/Free-Thinker/p/4843839.html

Swift - final关键字的介绍,以及使用场景的更多相关文章

  1. Swift2.0新特性

    也体现了Swift的安全性为本的核心理念。感觉脑洞小开哦~错误处理try,catch语句的增加Swift2.0中提供了对错误处理更好的支持,增加了try-catch语句。我们还需要在我们的方法中抛出这些异常:现在调用这个方法的时候,就可以通过try,catch来处理异常情况了:guard关键字Swift2.0中新引入了一个叫做guard的关键字用于条件判断处理。Swift2.0是一个重大的改进,包括了很多的优化与改动,这里面只介绍了其中一些比较显著的优化与更新。

  2. Swift final关键字

    final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作。Swift中,final关键字可以在class、func和var前修饰。1,通过使用final提升程序性能通常认为final能改成性能,因为编译器能从final中获取额外的信息,因此可以对类或者方法调用进行额外的优化处理。所以如果抱着提升性能的想法,就算把所有不需要继承的方法、类都加上final关键字,也没多大作用。

  3. Swift - final关键字的介绍,以及使用场景

    Swift-final关键字的介绍,以及使用场景final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作。Swift中,final关键字可以在class、func和var前修饰。1,想通过使用final提升程序性能-效果有限通常认为final能改成性能,因为编译器能从final中获取额外的信息,因此可以对类或者方法调用进行额外的优化处理。所以如果抱着提升性能的想法,就算把所有不需要继承的方法、类都加上final关键字,也没多大作用。

  4. php – 从文本块中提取相关标记/关键字

    我想要一个特定的实现,以便用户提供一个文本块,如:“Requirements–WorkingkNowledge,onLAMPEnvironmentusingLinux,Apache2,MySQL5andPHP5,–KNowledgeofWeb2.0Standards–ComfortablewithJSON–HandsonExperienceonworkingwithFrameworks,Zend,

  5. c# – LINQ to Entities无法识别方法’System.String [] Split(Char [])’方法,

    我正在尝试实现一种方法,其中存储在活动数据库中的关键字与用逗号分隔的给定字符串匹配.我收到以下错误:解决方法对于不涉及太多关键字和太多行的查询,您可以实现这种简单快速的解决方案.您可以通过反复优化结果轻松绕过Split功能,如下所示:

  6. C/C++和C#/ Java之间的volatile的使用有什么区别?

    我在许多参考文献中发现,C/C++中的易失性很弱,可能在多处理器的并发环境中引起问题,但它(易失性)可以用作C#/Java中不同cpu之间的通信机制.似乎这个关键字在C#/Java中比在C/C++中更严格,但它们之间有什么区别/影响?

  7. Cocos2d-x 2.0 数据结构

    CCString简介CCString继承至CCObject,CCObjecte这个基类主要是为了自动内存管理而创建的。CCArray简介CCArray是cocos2d鼎力支持的数据结构类。你可以在Cocos2d-x源文件目录cocos2d/support/data_support里面找到CCArray的实现。CCArray在cocos2d内被使用广泛,它模拟了苹果NSMutableArray的功能,但是执行效率更高。而且CCDictionary也是最近才被添加进来的。由于CCDictionary没有使用C

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部