ARC 메모리해제 - TIL45
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이 발생하게 됩니다.
댓글
