iOS/설명

[iOS] ARC의 동작 방법

Sky Titan 2025. 11. 2. 14:33
728x90

ARC (Automatic Reference Counting)

  • Swift, Objective-C에서 heap 영역에 저장되는 Class 객체들의 reference count를 자동으로 관리해주어 메모리를 관리해주는 장식
  • 각 객체들의 참조하는 곳이 증가할 때 reference count를 늘리고, 참조하는 곳이 줄어들 때 감소시킨다.
  • reference count가 0이 되면 deinit을 호출하며 메모리해서 해제시킨다.

 

ARC의 동작 시점 및 원리

  • 컴파일단계에서 컴파일러가 자동으로 각 시점별로 retain, release 함수를 코드에 삽입한다,.
    • 변수가 새 객체를 가리킬 때: retain
    • 변수가 nil이 되거나 스코프를 벗어날 때: release
    • 카운트가 0이 될 때: deinit 호출

 

예시 원본 코드

  • Person이라는 클래스가 있고 test함수 호출 시 함수 내부에 지역 변수로 Person의 객체가 생성됨.
class Person {
    var name: String
    init(name: String) { self.name = name }
    deinit { print("\(name) 메모리 해제") }
}

func test() {
    var p = Person(name: "보라")
    print(p.name)
}

 

실제 컴파일 시 동작하는 코드

  • 객체 생성 시 retain함수가 동작하고 스콥이 종료될 때 release함수가 호출되어 reference count를 낮춘다.
  • 이 때 reference count가 0이 되므로 deinit이 호출될 것이다.
func test() {
    var p = _objc_retain(Person(name: "보라"))   // 참조 카운트 +1
    print(p.name)
    _objc_release(p)                             // 참조 카운트 -1 → 0이 되면 deinit 호출
}

 

728x90