我在看WWDC 2015 session 409 - Optimizing Swift Performance 。它提到Swift确保数组访问发生在边界内。而Swift可以将检查提升出来。因此O(n)检查变为O(1)。
谈话的例子如下:
//Before Optimization
for i in 0..<n {
precondition (i < length)
A[i] ^= 13
}
//After Optimization
precondition (i < length)
for i in 0..<n {
A[i] ^= 13
}
根据我的理解,编译器应该在编译代码时执行所谓的数组边界检查。但是,当我使用以下代码进行测试时,我没有看到编译器的警告。相反,它在运行时崩溃了。
var a = Array(1...5)
for i in 0..<6 {
a[i] ^= 13
}
我确实在构建设置下将禁用安全检查设置为否。我认为这应该打开阵列边界检查。谁知道为什么?
答案 0 :(得分:0)
谈话中的例子显示了precondition()的使用,但你的代码似乎没有使用precondition()