iOS学习笔记-defer关键字

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

你可能感兴趣的:(iOS学习笔记-defer关键字)