ARC 메모리해제 - TIL45

future0159 2월 13일 PM 09:14 7 1
future0159 Profile Image Level 9
1

ARC 예제

class Person {
    let name: String
    init(name: String) {
        self.name = name
        print("\(name) is being initialized")
    }
    deinit {
        print("\(name) is being deinitialized")
    }
}
var reference1: Person?
var reference2: Person?
var reference3: Person?

reference1 = Person(name: "John Appleseed")
reference2 = reference1
reference3 = reference1

일단, reference1, reference2, reference3의 name은 모두 "John Appleseed"으로 동일하다.
그럼 이때 John Appleseed라는 이름을 가진 Person 객체의 reference count는 3이다.

reference1 = nil
reference3 = nil
reference2 = nil 

reference1, 3, 2에서 차례로 참조를 하지 않음으로써 reference count 3 -> 2 -> 1 -> 0가 됩니다.
ARC에서는 특정 객체를 "활성화된 참조변수가 존재하지 않는다면" 메모리로부터 해제합니다.

활성화된 참조변수가 존재하지 않는다면 ARC는 특정 객체를 메모리로부터 "해제"시킵니다.

따라서 reference2가 nil이 된 시점에, 메모리로부터 해제됩니다. 메모리로부터 해제되기 때문에 deinit이 발생하게 됩니다.

댓글