ARC란?
Automatic Reference Counting의 약자로, 앱의 메모리 사용을 추적하고 관리해주는 기능이다.
클래스가 새로운 인스턴스를 할당하게 되면 ARC는 인스턴스 정보를 저장할 메모리를 할당하고 참조 카운트를 증가시킨다. 그 후 인스턴스의 참조가 해제되면 참조카운트를 감소시키고 더이상 필요하지 않은 상태가 되면 참조카운트가 0이 되어 자동으로 메모리에서 해제가 된다.
ARC에서 발생할 수 있는 문제
- 순환 참조
순환 참조를 해결하기 위한 방법
- Reference Count 계산에 포함되지 않는 unowned 나 weak를 사용한다.
- 메모리에 없는 객체를 참조하게 되면 unowned는 crash가 나고, weak는 nil을 반환한다.
- 하지만, 약한 참조를 사용하여 객체의 수명이 종료되는 동안 수명에 의존하고 있기에, 미래에 버그가 나타날 수 있음
weak와 unowned 참조를 안전하게 처리하는 방법
- Optional Binding
- withExtendedLifeTime()
- 강한 참조 접근으로 설계
- 내부 클래스 정보에 가시성을 제한하도록 재설계