왜 정리되고 왜 안 정리되는지 함께 푸는 결
ARC는 한 객체를 몇 군데서 붙들고 있는지 세어, 아무도 안 붙들면 메모리에서 치우는 방식으로 이해합니다. 그래서 평소엔 사람이 신경 안 써도 정리됩니다. 문제는 서로가 서로를 붙들 때입니다. A가 B를, B가 A를 강하게 붙들면 둘 다 셈이 0이 안 돼 영영 안 치워집니다. 이게 순환 참조이고, 셋이 나뉘는 이유가 여기 있습니다. strong은 붙드는 것, weak는 셈을 올리지 않고 참조만 하되 사라지면 비는 것, unowned는 셈을 안 올리지만 사라져도 비지 않는 것입니다. 그래서 상대가 먼저 사라질 수 있으면 weak, 상대가 나보다 먼저 사라질 일이 없다고 확신하면 unowned를 씁니다. 학부 프로젝트에서 콜백이 화면을 강하게 붙들어 화면이 안 사라지던 누수를 weak로 끊은 경험이 이 이해의 근거입니다. 지금도 참조를 둘 땐 누가 누구보다 오래 사는가부터 따집니다.