ARC (Automatic Reference Counting)
힙에 할당되는 참조 타입을 해당 값이 더 이상 필요하지 않을 때, 자동으로 메모리에서 해제해주는 기법
이를 통해 개발자가 직접 참조타입에 메모리 할당, 해제를 해주지 않아도 자동으로 메모리 할당과 해제가 이루어져 메모리 누수를 막을 수 있다.
RC(Reference Count)를 이용한 메모리 관리 기법으로, 힙에 할당되는 인스턴스마다 RC를 갖고 있음.
해당 인스턴스가 참조되고 있는 횟수를 나타내며, 0이 되면 자동으로 해제 된다.
- 참조 횟수(RC)를 증가시키는 경우
- 인스턴스를 새로 생성할 때 (ex. 클래스 인스턴스 생성 → 변수에 대입)
- 기존 인스턴스를 다른 변수에 새로 대입할 때
- 참조 횟수(RC)를 감소시키는 경우
- 인스턴스를 가리키던(참조하던) 변수가 메모리에서 해제되었을 때 (ex. 해당 변수가 속한 함수가 끝났을 때)
- 인스턴스를 저장했던 변수에 nil을 할당할 때, 그 변수에 다른 값을 할당할 때
- 인스턴스가 다른 인스턴스의 프로퍼티로 들어가는 경우, 상위 인스턴스가 메모리에서 해제될 때
(그에 속한 인스턴스의 참조횟수 -1 (메모리 해제 X))
Garbage Collection(GC)과의 차이점
- RC(Reference Counting) 방식은 컴파일 시에 참조 카운트를 계산함
- → 개발자가 해제 시점을 파악할 수 있음
- → 순환참조 발생시 인스턴스가 해제되지 않을 수 있음
- CG(Garbage Collection) 방식은 런타임에도 계속 추적 계산함
- → 개발자가 해제 시점을 파악하기 어려움
- → 메모리 해제가 안되는 경우가 드뭄
- → 런타임에도 계속 추적하기 때문에 오버헤드가 듬
728x90
'iOS > swift' 카테고리의 다른 글
[Swift] 데이터타입/컬렉션타입/구조체,클래스,열거형/옵셔널 #1 (0) | 2022.02.19 |
---|