미루다
연기하다
라는 뜻을 가진다.
함수
안에서 작성되는 클로저
이다.
작성된 위치와 상관없이 함수 종료 직전에 실행되는 문
이다.
아래와 같이 생겼다.
func testDefer(){
print("Check #1")
defer {
print("defer #1")
}
print("Check #2")
}
testDefer()
defer
를 읽기 전에 함수가 종료되면 defer
는 실행되지 않는다.func testDefer(){
print("Check #1")
return;
defer {
print("defer #1")
}
print("Check #2")
}
defer
를 호출가능하며, 실행순서는 가장 마지막에 실행된 defer 부터 역순이다. func testDefer(){
defer { print("defer #1") }
defer { print("defer #2") }
defer { print("defer #3") }
}
실행은 역순으로
defer #3
defer #2
defer #1
func testDefer(){
defer{
defer{
defer{
print("defer#3")
}
print("defer #2")
}
print("defer #1")
}
}
상호배제
를 걸 때 함수가 종료되기 전에 Lock
이 걸린 경우, 이 Lock
을 풀어주어야 데드락에 걸리지 않는다. let myLock : NSLock = .init()
func fetchData(){
myLock.lock()
defer{
myLock.unlock()
}
if data == nil {return}
}