정리 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이지만 접근할 수 있는 변수는 다 지운 상태..)
나중에 메모리 부족현상이 발생하는 요인이므로 꼼꼼히 코딩하자