메모리·ARC
화면 전환 뒤 객체 해제 확인
UIKit 화면을 닫았는데 그 ViewController가 계속 메모리에 남아 있습니다. deinit 로그만 믿지 않고 누가 붙잡고 있는지 어떻게 찾겠습니까?
면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
UIKit 화면을 닫았는데 그 ViewController가 계속 메모리에 남아 있습니다. deinit 로그만 믿지 않고 누가 붙잡고 있는지 어떻게 찾겠습니까?
화면을 닫은 직후 Xcode의 Debug Memory Graph를 찍어 남아 있는 ViewController 인스턴스를 고르고, 오른쪽 인스펙터의 retainer 목록과 그래프의 들어오는 화살표를 따라가 Timer, NotificationCenter 블록 옵저버, 클로저 컨텍스트 중 누가 strong으로 잡고 있는지 확인한다.
메모리·ARC주관식기초
특정 화면을 닫아도 그 뷰컨트롤러가 메모리에서 사라지지 않는 것 같습니다. 순환 참조가 실제로 있는지 어떻게 확인하겠습니까?
#memory-graph
메모리·ARC객관식기초
다음 중 (별도 조치가 없을 때) 순환 참조 또는 영구 누수가 생기는 경우를 모두 고르세요.
#timer
메모리·ARC객관식기초
다음 코드 조각 중 ViewController가 화면에서 사라진 뒤에도 해제되지 않게 만드는(누수를 일으키는) 것을 모두 고르세요. 각 코드는…
#timer
메모리·ARC주관식기초
실제로 겪은 메모리 누수를 하나 떠올려 보세요. 어떻게 발견했고, 원인을 어떻게 특정했으며, "고쳐졌다"는 것을 어떻게 증명했나요?
#memory-graph