// defer
// 코드의 실행을 스코프가 종료되는 시점으로 연기시킨다.
// 보통 리소스 해제에 많이 사용한다.
// defer문을 실행하면 statment가 바로 실행되지 않고 defer문이 호출된 스코프의 실행이 종료될때 까지 연기된다.
func processFile(path: String) {
let file = FileHandle(forReadingAtPath: path)
print("1")
// Process
// runtime err가 발생하는 경우를 제외하고 이 함수가 종료되는 시점에 항상 호출된다.
defer {
print("2")
file?.closeFile()
}
// 이렇게하면 .jpg일때 바로 종료되는데 자원이 해제가 안된다.
if path.hasSuffix(".jpg") {
print("3")
return
}
defer {
print("5")
}
//파일에서는 리소스를 해제하는게 중요하다
// file?.closeFile()
print("4")
}
processFile(path: "file.jpg")
func testDefer() {
defer {
print(1)
}
defer {
print(2)
}
defer {
print(3)
}
}
testDefer()