iOS
[iOS] ARC(Automatic Reference Counting)
seongminmon
2024. 8. 12. 20:21
ARC란?
Swift에서의 메모리 관리 방법
객체의 참조 횟수(reference count)를 계산하여, 참조 횟수가 0이되면 메모리를 해제하는 방식
ARC에서 발생할 수 있는 문제점
서로 다른 객체들이 순환 형태로 참조하고 있는 경우 reference count가 0이 되지 않아 메모리에서 해제되지 않는 순환 참조 문제가 발생할 수 있음
순환 참조 문제 해결법
reference count를 증가시키지 않도록 weak나 unowned 키워드를 통해 해결할 수 있음
weak와 unowned의 차이점
weak는 객체가 메모리에서 내려간 경우 옵셔널 타입으로 선언되어 nil값을 가짐
unowned는 참조하는 객체가 항상 존재한다고 가정하여, 참조하는 객체가 메모리에서 해제되면 런타임 에러가 발생할 수 있음
ARC와 GC(Garbage Collection) 비교
ARC는 컴파일 시점에, GC는 런타임에 실행됨
GC는 런타임 시점에 실행되기 때문에 ARC에 비해 오버헤드가 높음
GC는 런타임에 주기적으로 메모리를 검사하여 순환 참조를 탐색하고 메모리에서 해제할 수 있어 순환 참조 문제가 발생하지 않음