← 질문 목록
#100깊이 0

자동 참조 계산인데 왜 메모리가 남는가?

모바일기초메모리

강한 참조 고리가 생기면 각 객체의 참조 수가 0이 되지 않기 때문이다. 외부 소유자가 놓아도 고리 안의 객체는 해제되지 않는다.

  1. 1. 객체 A에서 객체 B로: 강한 참조로 수를 올린다
  2. 2. 객체 B에서 객체 A로: 강한 참조로 수를 올린다
  3. 3. 소유자에서 객체 A로: 참조를 놓아도 두 객체가 남는다

소유 관계가 아닌 역참조는 weak로 끊는다. 대상이 먼저 사라지지 않는다는 수명 보장이 있을 때만 unowned를 쓴다.

클로저가 self를 강하게 캡처하고 self가 그 클로저를 보관해도 고리가 된다. 캡처 목록은 수명과 비동기 실행 시점을 따져 정한다.

deinit 로그와 메모리 그래프로 해제 여부를 확인한다. weak를 무조건 붙이면 작업 중 객체가 사라지는 다른 버그를 만들 수 있다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

자동 참조 계산인데 왜 메모리가 남는가?