샘성의 iOS 개발 일지

ARC란 무엇인지 설명하시오. 본문

iOS/면접

ARC란 무엇인지 설명하시오.

SamusesApple 2023. 6. 15. 22:13
728x90

1. Reference Counting(RC)이란?

   : 힙(Heap) 영역의 RC(Reference Count - 참조 숫자)를 세어본 후, RC(참조 숫자)가 0인 순간, 메모리 관리 혹은 컴파일 할 때 메모리 해제시점을 결정하는 방식

  • RC 모델 방식을 개발자가 직접 수동으로(Manual) 구현하여 메모리 관리를 하는 모델

  • Objective-C에서 사용하는 방식
    • 현재는 MRC, ARC 방식 둘 중 선택 가능
  • 수동으로 RC를 개발자가 구현하여 메모리 관리가 필연적인 모델
    • 메모리를 관리하기 위한 변수 var refCount: Int 존재
    • retain() : RC(참조 숫자)를 +1 하는 코드 → 메모리 할당**
    • release() RC(참조 숫자)를 -1 하는 코드 → 메모리 해제**
      ⇒ 할당과 해제 둘다 구현해야 하기에 개발자의 실수 가능성 다분했음

2. Automatic Reference Counting(ARC)

  : Xcode에서 컴파일 할 때 컴파일러가 자동으로 RC 모델 방식으로 메모리를 관리하는 방식 (수동 관리 불가능). 
      ⇒ 컴파일러가 참조 숫자를 잘못 인식하지 않도록 유의해야함

  • Swift에서 사용하는 방식
    • 현재 Objective-C에서도 ARC 모델 사용 가능
  • retain()와 release() 코드를 컴파일러가 자동으로 심어줘서 메모리 정리
    • 컴파일 과정에서 오류 발생 가능성 있기에 개발자는 ARC 모델 이해하고 메모리 정리해야함
    • 메모리가 할당되면 retain() 키워드 컴파일러가 구현RC +1
    • 메모리가 해제되면 (e.g. nil 할당) release() 키워드 컴파일러가 구현RC -1
    • ⇒ retain()과 release()를 개발자가 수동으로 구현하여 관리 불가능

 

 * ARC모델의 기반 : 소유 정책과 참조 카운팅

  1. 소유 정책: 인스턴스는 하나 이상의 소유자가 있는 경우 메모리에 유지됨 ⇒ 소유자가 없으면 메모리에서 제거
  2. 참조 카운팅: 인스턴스(나)를 가리키는 소유자 수를 카운팅
728x90