메모리·ARC
클로저 캡처 순환 참조
메시지 앱의 ViewModel이 프로퍼티로 오래 보관하는 completion 클로저 안에서 self.messages를 갱신합니다. 어떤 참조 그래프 때문에 retain cycle이 생깁니까?
면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
메시지 앱의 ViewModel이 프로퍼티로 오래 보관하는 completion 클로저 안에서 self.messages를 갱신합니다. 어떤 참조 그래프 때문에 retain cycle이 생깁니까?
ViewModel이 클로저를 프로퍼티로 strong하게 들고, 클로저는 본문에서 self.messages를 쓰는 순간 self를 strong으로 캡처하므로 ViewModel에서 클로저로, 클로저에서 다시 ViewModel로 향하는 화살표 두 개가 고리를 이루어 어느 쪽도 해제되지 못한다.