面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

deferを正しく理解していなかった

使い方次第では便利なdeferだけど、理解しているようでやや理解していないというか勘違いしていた話。

// defer使用方法
defer {
	// 後から行いたい処理
}

下のような書き方してて、ふと処理Aと処理Bどちらが後から処理されるんだろうと思った。理解している人からしたら疑問に思う余地ないんだろうけど。

deferは書いてあるメソッド等の{}ブロックの処理を抜ける時に行われる。
closureは後から非同期で処理が行われる。
状況によっては入れ替わることもありうるのかもしれんけど、ほぼ処理A→処理Bの順で行われると思う。
でも、確実ではないから処理Aと処理Bがシリアルな作りを想定した内容だとしたらやめた方がいいってところかな?

func hoge() {
	defer{
		処理A
	}

	closure{_ in
		処理B
	}
}