gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 06:03:48 25 4
gpt4 key购买 nike

我知道通过在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com