티스토리 뷰

개발/iOS

[Swift] ARC (Automatic Reference Counting)

DeveloperFury 2019. 6. 1. 19:56
1. ARC (Automatic Reference Counting)

 

ARC란?
  • RC 자동 관리 방식 (WWDC 2011 발표)
  • 컴파일러가 개발자를 대신하여 메모리 관리 코드를 적절한 위치에 자동으로 삽입
  • GC(Garbage Collection)처럼 런타임이 아닌 컴파일 단에서 처리
  • 메모리 관리 이슈를 줄이고 개발자가 코딩 자체에 집중할 수 있도록 함

 

ARC 특징
  • ARC는 클래스의 인스턴스에만 적용 (Class - Reference 타입, Struct / Enum - Value 타입)
  • 활성화된 참조 카운트가 하나라도 있을 경우 메모리에서 해제 되지 않음

 

참조 타입
  • 강한 참조 (Strong) : 기본값. 참조될 때마다 참조 카운트 1 증가
  • 약한 참조 (Weak), 미소유 참조(Unowned) : 참조 카운트를 증가시키지 않음
  • 강한 순환 참조 (Strong Reference Cycles)에 대한 주의 필요

 

 

2. 강한 순환 참조 (Strong Reference Cycle)

 

강한 순환 참조
  • 객체에 접근 가능한 모든 연결을 끊었음에도 순환 참조로 인해 활성화된 참조 카운트가 남아 있어 메모리 누수가 발생하는 현상
  • 앱의 실행이 느려지거나 오동작 또는 오류를 발생시키는 원인이 됨

 

 

1. 객체1을 생성 후, 객체 2를 참조

2. 객체2는 객체 3을 참조

3. 객체3은 객체 2를 참조 ( 객체 2와 객체 3은 서로를 참조)

4. 객체1를 삭제

5. 객체2와 객체 3을 참조할 수 있는 객체 1이 사라졌음에도 불구하고 메모리에 남아 있음

댓글