참고 사이트 : https://babbab2.tistory.com/27
class Man {
var name: String
var grilfriend: Woman?
init(name: String){
self.name = name
}
deinit {
print("Man deinit")
}
}
class Woman {
var name: String
var boyfriend: Man?
init(name: String) {
self.name = name
}
deinit {
print("Woman deinit")
}
}
var jimin: Man? = Man(name: "Jimin") // strong, Man RC : 1
var minjung: Woman? = Woman(name: "minjung") // strong, Woman RC : 1
jimin?.girlfriend = minjung // Woman RC : 2
minjung?.boyfriend = jimin // Man RC : 2
jimin = nil // Man deinit이 호출되지 않음
minjung = nil // Woman deinit이 호출되지 않음
// 둘 다 힙 영역의 메모리에서 존재
class Man {
var name: String
weak var grilfriend: Woman?
init(name: String){
self.name = name
}
deinit {
print("Man deinit")
}
}
class Woman {
var name: String
var boyfriend: Man?
init(name: String) {
self.name = name
}
deinit {
print("Woman deinit")
}
}
var jimin: Man? = .init(name: "jimin") // Man RC : 1
var minjung: Woman? = .init(name: "minjung") // Woman RC : 1
jimin.grilfriend = minjung // Woman RC : 1
minjung.boyfriend = jimin // Man RC : 2
jimin = nil
minjung = nil
// nil 할당 순간 각각 RC 1 씩 감소 Man RC : 1, Woman RC : 0
// RC가 0이 된 Woman Instance가 메모리에서 해제 Man RC : 0
// Woman Deinit
// weak로 선언된 girlfriend 참조 인스턴스가 메모리에서 해제되어 girlfriend 값이 nil로 할당
// Man RC : 0 이 되어 메모리에서 해제
// deinit 작동
// Man Deinit
class Man {
var name: String
unowned var girlfriend: Woman?
init(name: String) {
self.name = name
}
deinit { print("Man Deinit!") }
}
class Woman {
var name: String
var boyfriend: Man?
init(name: String) {
self.name = name
}
deinit { print("Woman Deinit!") }
}
minjung = nil
// Man RC의 grilfriend 프로퍼티가 nil을 할당 받지 못해 해제된 메모리 주소값을 갖고 있게됨
jimin.girlfriend // girlfriend 프로퍼티 접근시 시스템 에러 발생