defer

냐옹·2024년 7월 15일
0

IOS

목록 보기
25/32

defer

  • 미루다 연기하다 라는 뜻을 가진다.

  • 함수 안에서 작성되는 클로저이다.

  • 작성된 위치와 상관없이 함수 종료 직전에 실행되는 이다.

  • 아래와 같이 생겼다.

func testDefer(){
	print("Check #1")
  
  	defer {
    	print("defer #1")
    }
  
  	print("Check #2")
}

testDefer()

특징

    1. defer를 읽기 전에 함수가 종료되면 defer는 실행되지 않는다.
func testDefer(){
	print("Check #1")
  	return;
  
  	defer {
    	print("defer #1")
    }
  
  	print("Check #2")
}
    1. 하나의 함수에서 여러번 defer를 호출가능하며, 실행순서는 가장 마지막에 실행된 defer 부터 역순이다.
func testDefer(){
	defer { print("defer #1") }
    defer { print("defer #2") }
    defer { print("defer #3") }
}

실행은 역순으로
defer #3
defer #2
defer #1

    1. defer는 중첩에서도 사용가능하며, 실행 순서는 가장 바깥쪽 defer부터 실행된다.
  • 가장 바깥 쪽에 있는 defer가 가장 먼저 실행되고
  • 가장 안쪽에 있는 defer가 가장 마지막에 실행된다.
func testDefer(){
	defer{
    	defer{
        	defer{
          		print("defer#3")  
            }
          	print("defer #2")
        }
      	print("defer #1")
    }
}
    1. defer는 언제 사용할까
  • 함수를 종료하기 직전에 정리해야하는 변수나 상수를 처리하는 용도로 주로 사용한다.
    ㄴ NSLock을 이용해서 상호배제를 걸 때 함수가 종료되기 전에 Lock이 걸린 경우, 이 Lock을 풀어주어야 데드락에 걸리지 않는다.
let myLock : NSLock = .init()

func fetchData(){
	myLock.lock()
  
  	defer{
    	myLock.unlock()
    }
  
  	if data == nil {return}	
}

출처 https://babbab2.tistory.com/80

0개의 댓글