컴파일러
는 retain / release 연산자를 삽입한다.runtime
에 reference count가 0 이면 할당을 해제한다.Traveler 객체 생성
Traveler reference count: 1
Account의 traveler를 weak로 선언해 순환 참조 방지
guaranted object lifetime이후에 약한 참조에 접근하거나 observed object lifetime에 의존하면 나중에 버그 발생
defer을 사용해도 됨
쉽게 lifetime 버그 잡는거같지만 이 기술을 fragile 하고 정확성의 책임을 너에게 전달한다
이러한 저근방식으로는 약한 참조가 버그를 발생시킬 가능성이 있는데 마다 withExtendedLifetime()을 사용해야된다.
withExtendedLifetime이 제어되지 않으면 유지 보수 비용을 증가시킬 수 있다.