정리 X/Swift

클로저(메모리)에 관하여

va95 2021. 2. 5. 22:13

클로저는 참조 타입이다(힙에 저장됨)

클로저 안에서 지역변수를 strong으로 캡쳐해놓으면 카운팅 효과 <- 얘 땜에 종종 self를 weak로 선언해줘야하는 이유

 

 

addUnaryOperation("√") { [ unowned me = self ] in

    me.display.textColor = UIColor.redColor()

    return sqrt($0)

} <- 강한 에러 가능성 있음

 

addUnaryOperation("√") { [ weak weakSelf = self ] in

weakSelf?.display.textColor = UIColor.redColor()

    return sqrt($0)

} <- good

 

 

클로저를 사용할 때 항상 주의하자!

 

예를 들어

클로저를 참조하는 viewController + 해당 viewController를 strong self로 가지고 있는 클로저

= 아무리 지워도 사라지지 않은 순환 문제 발생함!(서로 참조 횟수는 1, 1이지만 접근할 수 있는 변수는 다 지운 상태..)

나중에 메모리 부족현상이 발생하는 요인이므로 꼼꼼히 코딩하자