如果我有var x: CustomType?,使用展开时性能会受到什么打击x!?写作有以下意思:
if let x1 = x {
f(x1)
f2(x1)
}
Run Code Online (Sandbox Code Playgroud)
或者我可以写出相同的表现:
f(x!)
f2(x!)
Run Code Online (Sandbox Code Playgroud)
注意:我知道在第一种情况下检查选项是否有效,但如果我知道此选项在此代码中100%有效,该怎么办?
除非你正在编译-Ounchecked(并且不这样做),否则它们最终会非常相似,因为运行时仍然会检查可选项是否包含值(因为如果强制解包nil值,则得到一个运行时断言,它不仅仅访问内存,就好像它不是nil).可能带来if let优势的是你正在告诉编译器更多关于你要做什么的事情,这使它有更好的机会来优化它.
然而,不要担心这个问题,而是考虑所有的想法,想知道哪个更快,更重要的是,你总是花时间来推断它是否可以安全使用,!因为你的变量肯定可能几乎肯定不会是零(哎呀,除了那一次),并把它更好地使用.
而是把时间花在优化实际重要的东西上.O(n^2)当你可以做它们时,寻找你正在做的事情O(n log n).考虑缓存局部性.考虑在运行时在编译时执行更多操作.不要担心可能会花费你一条CPU指令而不是更安全的替代方案.
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |