是的,它确实会减慢代码速度。
Both print
and println
降低应用程序的性能。
打印问题
println
当 Swift 进行代码优化时,不会被删除。
for i in 0...1_000 {
println(i)
}
该代码无法优化,编译后汇编代码将执行一个包含 1000 条指令的循环,而这些指令实际上没有做任何有价值的事情。
分析汇编代码
问题是 Swift 编译器无法对代码进行最优优化print
and println
命令。
如果您查看生成的汇编代码,您可以看到它。
您可以使用以下命令查看汇编代码Hopper http://www.hopperapp.com反汇编器或通过使用将 Swift 代码编译到程序集swiftc
编译器:
xcrun swiftc -emit-assembly myCode.swift
快速代码优化
让我们看几个例子以更好地理解。
Swift 编译器可以消除很多不必要的代码,例如:
Example:
class Object {
func nothing() {
}
}
for i in 0...1_000 {
let object = Object3(x: i)
object.nothing()
object.nothing()
}
在此示例中,Swift 编译器将进行此优化:
1.删除两者nothing
方法调用
此后循环体将只有 1 条指令
for i in 0...1_000 {
let object = Object(x: i)
}
2.然后它会删除创建Object
实例,因为它实际上没有被使用。
for i in 0...1_000 {
}
3.最后一步是删除空循环。
我们最终没有代码可以执行
解决方案
这绝对不是最好的解决方案。
//println("A")
通过这个解决方案,您可以简单地更改 debug_print 函数的逻辑
debug_println("A)
func debug_println<T>(object: T) {
#if DEBUG
println(object)
#endif
}
结论
始终删除print
and println
从发布应用程序开始!
如果你添加print
and println
指令,Swift 代码无法以最优化的方式进行优化,并且可能导致巨大的性能损失。