[Swift] - defer λ¬Έμ΄λ?
μ μΈλ λΈλ‘μ μ€νμ μ€μ½ν μ’ λ£ μ§μ κΉμ§ μ°κΈ°μν€λ ν€μλ
"νΈμΆ μμ κ³Ό μ€ν μμ μ΄ λ€λ₯΄λ€"
μ©λ : μ£Όλ‘ μ½λμμ μ¬μ©νλ μμμ μ 리ν λ μ¬μ©νλ€.
μμ) νμΌ μ²λ¦¬ μμ νμΌ λ«κΈ°
func processFile(path: String) {
let file = FileHandle(forReadingAtPath: path)
// Process
if path.hasSuffic(".jpg") {
return
// closeFile()μ΄ νΈμΆλμ§ μμ
}
file?.closeFile()
}
π‘ν΄κ²°
defer
λ¬Έ μμ closeFile
μ ꡬνν΄ λμΌλ©΄ ν¨μ λ°ν μ§μ μ μ€νμ 보μ₯ν μ μλ€.
func processFile(path: String) {
let file = FileHandle(forReadingAtPath: path)
// Process
defer {
// μ€μ½ν μ’
λ£ μμ μΌλ‘ μ€ν μ°κΈ°
file?.closeFile()
}
if path.hasSuffic(".jpg") {
return
}
}
βοΈμ£Όμν μ
defer λ¬Έμ΄ μ°μ νΈμΆλμ΄μΌ μ’ λ£ μμ μ μ€νλ μ μλ€.
μλ μ½λλ if λ¬Έ
μμ processFile(path:)
κ° λ°νλμ΄, defer
λ¬Έμ΄ νΈμΆλμ§ μλλ€.
ν΄κ²° : λ°λΌμ μ½λ λΈλ‘ μλ¨μ μ£Όλ‘ defer
λ¬Έμ μ μΈν΄λλλ€. (μμ μ½λ μ°Έκ³ )
func processFile(path: String) {
let file = FileHandle(forReadingAtPath: path)
// Process
if path.hasSuffic(".jpg") {
return
}
// if λ¬Έμμ μ’
λ£λλ©΄ νΈμΆλμ§ μμ μ μλ€.
defer {
file?.closeFile()
}
}
π― μ¬λ¬ κ°μ defer λΈλ‘ νΈμΆ μμ
defer λ¬Έμ νΈμΆλλ μμμ μμμΌλ‘ μ€νλλ€. LIFO λ°©μμ΄λΌκ³ μκ°νλ©΄ μ΄ν΄κ° νΈνλ€.
μ΄μ κ°μ΄ defer
λ¬Έμ νΉμ§μ μ΄ν΄νμ§ λͺ»νκ³ κ΅¬ννλ©΄ λ
Όλ¦¬μ μΈ μ€λ₯κ° λ°μν μ μλ€.
κ·Έλμ λ³΄ν΅ defer νλμ μ½λλ₯Ό λͺ¨μ λλλ€.
func deferTestFunction() {
defer {
print("1")
}
defer {
print("2")
}
defer {
print("3")
}
}
deferTestFunction()
// prints "3" -> "2" -> "1"
λ!
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.