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