1.内联是指在编译期把每一处方法调用替换为直接执行方法内部的代码.
这是个很棒的特性,可以帮你避免运行时方法调用的时间开销。下面是内联的一个简单例子:
struct Bird {
var name = ""
func fly() {
print("\(name)在飞翔")
}
}
func birdFly(bird: Bird) {
bird.fly()
}
let mq = = Bird(name: "麻雀")
birdFly(mq)
由于函数是内联的,所以在编译 birdFly 函数调用时,会使用 birdFly 内部的代码替换掉 birdFly 的调用,然后用传入的实参(mq)替换方法的形参 bird 的位置,经过内联优化之后,运行时的代码会变为:
let my = Bird(name: "麻雀")
mq.fly()
Bird 是结构体,所以实列方法 fly 可以继续内联,此时会使用 fly 方法内部的代码替换掉 fly 方法调用, 然后再参数 name 的位置放置 mq 的name,此时上述代码变为:
let my = Bird(name : "麻雀")
print("\(mq.name)在飞翔")
此时内联的优化结束了,代码中不再有方法和函数。运行时执行到上述代码时首先在栈上分配空间保存 mq 实列,接着代码顺序执行,在方法的具体实现结束后, mq 在栈上分配的内存会被回收。