iOS学习笔记-defer关键字
2022-03-02 本文已影响0人
酷拼车
1.概述
defer关键字是修饰一段函数内任一段代码,使其必须在函数中的其余代码都执行完毕,函数即将结束前调用。可以理解为将延迟执行。
2.细解
2.1 代码写一段
func testMethod_defer() {
print("函数开始");
defer {
print("defer_1");
}
defer {
print("defer_2");
}
print("函数结束")
}
2.2 执行结果
函数开始
函数结束
defer_2
defer_1
2.3 分析结果
由打印结果可以发现,两个defer都执行了,都在函数的最后执行的。
defer_2先于defer_1执行,说明如果一个函数中如果包含多个defer的话,会按照自下而上的属性去执行defer。
3.进阶版,异步情况
3.1 代码
func testMethod_deferAsync() {
print("函数开始");
defer {
print("defer_1");
}
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
print("异步执行");
}
defer {
print("defer_2");
}
print("函数结束")
}
3.2 执行结果
函数开始
函数结束
defer_2
defer_1
异步执行
3.3 分析结果
由打印结果可以看到,异步代码的执行,不会影响到defer的执行时间。
事实上,defer的执行只和其所在的作用域有关,如果作用域即将被回收,那么会在回收之前执行defer。