除了明显的原因(例如,由于设计原因,我不希望某些方法或属性,继承树中的任何东西被覆盖)外,是否还有其他原因需要final
在Swift中进行标记?
例如,是否有性能方面的考虑?我记得在某处读过SO答案,暗示了一些建议。
来自Apple的Swift博客:通过减少动态调度来提高性能
Swift允许一个类重写其超类中声明的方法和属性。这意味着程序必须在运行时确定要引用哪个方法或属性,然后执行间接调用或间接访问。这种称为动态调度的技术以每次间接使用时恒定的运行时开销为代价提高了语言的表达能力。
使用final
是通过消除这种活力来提高性能的几种方法之一:
“ final”关键字是对类,方法或属性的限制,指示不能覆盖该声明。这使编译器可以安全地消除动态调度间接寻址。