Swift - private var/func 与 private final var/func

标签 swift private final

我知道通过在 Swift 中将属性和方法设置为 final,我可以改善编译时间和应用程序的性能。最近我阅读了 Apple 博客文章:https://developer.apple.com/swift/blog/?id=27 ,它指出使属性或方法(文件)私有(private)(博客文章可以追溯到 2015 年,当时“私有(private)”意味着“文件私有(private)”)使编译器能够通过搜索源文件中的任何覆盖来推断属性或方法的“最终性”。但是“真正的”(Swift 3)私有(private)呢?编译器不必在任何地方搜索潜在的覆盖,所以我的问题是:

这两个声明之间是否存在任何性能和/或编译时间差异?

private final var foo: Int

private var bar: Int

最佳答案

标记为 private 的方法或属性隐式为 final。 在 @conarch 提供的测试中,有一个副作用——调度类。

我做了和 fallow 一样的测试:

    class UseFinal {
        private final var foo = 1
    }

    class NoUseFinal {
        private var foo = 1
    }

    var start = Date()
    print(NoUseFinal())
    print(UseFinal())
    print("construct takes \(Date().timeIntervalSince(start))")

    start = Date()
    for _ in 1...1_000_000 {
        let temp = NoUseFinal()
    }
    print("noUseFinal took \(Date().timeIntervalSince(start))")

    start = Date()
    for _ in 1...1_000_000 {
        let temp = UseFinal()
    }
    print("useFinal took   \(Date().timeIntervalSince(start))")

    print("----")
    start = Date()
    for _ in 1...1_000_000 {
        let temp = UseFinal()
    }
    print("useFinal took   \(Date().timeIntervalSince(start))")
    start = Date()
    for _ in 1...1_000_000 {
        let temp = NoUseFinal()
    }
    print("noUseFinal took \(Date().timeIntervalSince(start))")

我得到的结果如下:

NoUseFinal
UseFinal
----
construct takes 0.000900983810424805
noUseFinal took 0.182932019233704
useFinal took   0.182898044586182
----
useFinal took   0.183371007442474
noUseFinal took 0.182500004768372

因此 privateprivate final 调度程序的方法或属性没有区别

关于Swift - private var/func 与 private final var/func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865789/

相关文章:

swift - 在 Swift5 中实现多个 TableView 时可以吗?

arrays - 从 CoreData 获取给定属性具有相同值的对象?

c++ - final 在虚函数上的奇怪行为

iOS 应用程序被拒绝 - 私有(private)符号 mach_init_routine

java - 静态最终 int v/s 静态 int

java - 扩展最终类或替换它

swift - Firebase 快速删除快照子项

ios - 在不更改 View 的情况下在 View Controller 之间传递数据

Ruby - 从另一个方法中提取我的较小方法(将字符串转换为两个数字和一个符号)

swift - 在 swift 中使读公共(public)写私有(private)变量的不同方法?