[iOS] ARC

RudinP·2024년 3월 30일
0

Study

목록 보기
215/226

스택에 저장된 데이터는 자동으로 제거되지만, 힙은 아니므로 직접 제거해야 한다.

메모리 관리 모델

  • Objective-C에서는 MRC, ARC 사용 가능.
    • MRC는 메모리를 직접 관리
  • Swift에서는 ARC 사용 가능.

ARC (Automatic Reference Counting)

  • 컴파일러가 필요할 때 알아서 처리(메소드 끼워넣음)

Ownership Policy

  • 소유 정책
  • 인스턴스를 변수나 상수에 저장하면 변수나 상수가 인스턴스를 소유하게 됨
  • 인스턴스는 소유자가 있으면 메모리에 유지됨
  • 반대로 소유자가 없으면 메모리에서 제거
  • 즉, 참조카운트 > 0 -> 유지
  • 참조카운트 == 0 -> 메모리에서 제거
  • 소유하게되는 과정에서 내부적으로 메소드가 실행되는데, retain이라는 메소드다.
    • 참조카운트 1 증가
  • 소유권이 사라질 때는 release라는 메소드가 실행된다.
    • 참조카운트 1 감소

Reference Count

  • 참조 카운트
  • 소유자의 개수를 저장

ARC가 사용하는 3가지 참조

Strong Reference

  • 인스턴스와 소유자는 기본적으로 strong reference
  • retain시 RC +1, release시 RC -1
  • 소유자가 하나라도 있다면 메모리에서 삭제되지 않음
  • 값이 있던 옵셔널에 nil을 저장하는 것은 소유권을 포기하는것과 같다
    • 즉시 RC -1
  • 혹은 인스턴스가 포함된 스코프가 끝나면 메모리에서 정리
  • RC가 0이 되면 메모리에서 제거

Weak Reference

Unowned Reference

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글