[IOS - Swift] ARC

서프로·2023년 5월 4일
0

ARC란?

Automatic Reference Counting의 준말로 말 그대로 자동으로 메모리를 관리해주는 기능을 말한다.
스위프트는 프로그램의 메모리 사용을 관리하기 위해서 ARC를 사용하기 때문에 아무래도 프로그래머가 메모리 관리에 신경을 덜 쓸 수 있기에 편리합니다.

ARC의 특징

  • 참조 카운팅 시점: 컴파일 시
  • 장점
    컴파일 당시 이미 인스턴스의 해제시점이 정해져 있어서 인스턴스가 언제 메모리에서 해제될지 예측할 수 있음.
    컴파일 당시 이미 인스턴스의 해제 시점이 정해져 있어서 메모리 관리를 위한 시스템 자원을 추가할 필요가 없음.
  • 단점
    ARC의 작동 규칙을 모르고 사용하면 인스턴스가 메모리에서 영원히 해제되지 않을 가능성이 있음.

RC (참조횟수)

  • 어떤 인스턴스가 참조되는 횟수를 숫자로 나타낸 것.
  • RC = 0 이 되면 더 이상 참조되지 않는 인스턴스이므로 메모리에서 해제된다.
  • 모든 인스턴스는 자신의 RC 값을 가짐

예제코드

class Person {
    let name: String
    
    init(name: String) {
        self.name = name
        print("init - \(name)")
    }
    
    deinit {
        print("deinit")
    }
}

var reference1: Person?
var reference2: Person?
var reference3: Person?

reference1 = Person(name: "철수")
// init - 철수
// 인스턴스 참조 횟수 : 1
reference2 = reference1 // 인스턴스 참조 횟수 : 2
reference3 = reference1 // 인스턴스 참조 횟수 : 3

reference3 = nil // 인스턴스 참조 횟수 : 2
reference2 = nil // 인스턴스 참조 횟수 : 1
reference1 = nil // 인스턴스 참조 횟수 : 0
//deinit

위의 코드로 참조 횟수가 증가하는 시점과 감소하는 시점을 정리해보자.

증가하는 시점

  • 인스턴스를 새로 생성할 때
    • reference1 = Person(name: "철수")
  • 기존 인스턴스를 다른 변수에 대입할 때
    • reference2 = reference1

감소하는 시점

  • 인스턴스를 가리키던 변수가 메모리에서 해제될 때
  • nil이 지정 되었을 때
  • 변수에 다른 값을 대입할 때
  • 프로퍼티의 경우, 속해 있는 클래스 인스턴스가 메모리에서 해제될 때

0개의 댓글