Memory Management

박인준·2019년 12월 9일
0

Swift

목록 보기
12/21

Memory Management without ARC

  1. GC(Garbage Collection)
  • 정기적으로 CG가 동작하여 더이상 사용되지 않는 메모리를 반환하는 방식
  • OS X 에서만 지원했었으나 버전 10.8부터 deprecated
  1. MRR(Manual Retain-Relese) / MRC(Manual Referece Counting)
  • RC(Reference Counting) 를 통해 메모리를 수동으로 관리하는 방식

  • retain / release / autorelease 등의 메모리 관리 코드를 직접 호출

  • 개발자가 명시적으로 RC 를 증가시키고 감소시키는 작업 수행

    Leak vs Dangling Pointer

  • 카운트 할당과 해제는 균형이 맞아야 함
    - alloc , retain 이 많을 경우는 Memory Leak 발생
    - release 가 많을 경우 Dangling Pointer (허상, 고아) 발생


ARC(Automatic Reference Counting)

  • ARC 는 클래스의 인스턴스에만 적용 (Class - Reference 타입 , Struct / Enum - Value 타입)
  • 활성화된 참조카운트가 하나라도 있을 경우 메모리에서 해제 되지 않음
  • 참조 타입
    - 강한 참조 (Strong) : 기본값. 참조될 때마다 참조 카운트 1 증가
    - 약한 참조 (Weak), 미소유 참조 (Unowned) : 참조 카운트를 증가시키지 않음
  • 강한 순환 참조 (Strong Reference Cycles) 에 대한 주의 필요

"ARC는 참조타입에서만 사용됨"*

Strong Reference Cycle

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

-> Strong Reference는 기본이고 특별한 상황을 대비하여 Weak Reference로 선언

@객체1이 객체2를 참조하게 되면

profile
iOS 개발자가 되기 위해

0개의 댓글