https://github.com/Youngminah/TIL/issues/124
우리가 지금까지 했던 힙의 할당하는 방식이 강한 참조 방식이다!
즉 인스턴스의 주소값이 변수에 할당될 때, RC가 증가하면 강한 참조! 애초에 default 값이 strong~ 하지만 strong에 문제는 바로 순.환.참.조로 인해 메모리 누수로 인해 문제가 생길 수 있다!
메모리 누수는 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다.
iOS앱에 메모리 누수가 쌓이게되면 메모리 사용량이 증가하고, 결국엔 앱을 죽일 수 있다.
예시를 들어보자! 요즘 내가 킹받고 있는 꽃보다 남자로 예시를 들어보겠다. 먼저 준표랑 잔디를 등장시켜보겠다.
class Man {
var name: String
var girlfriend: Woman?
init(name: String) {
self.name = name
}
deinit { print("맨킬뎃쉿스껄!") }
}
class Woman {
var name: String
var boyfriend: Man?
init(name: String) {
self.name = name
}
deinit { print("우맨킬뎃쉿스껄!") }
}
var junpyo: Man? = .init(name: "준표")
var zandi: Woman? = .init(name: "잔디")
그리고 이 둘은 서로가 서로의 남친 여친임을 표시해준다. 메모리에서 볼 때 둘의 관계는 아래 그림과 같다.
junpyo?.girlfriend = zandi
zandi?.boyfriend = junpyo
그러면서 이 둘의 RC도 하나씩 증가했다.
자~ 이제 순환참조의 문제점에 대해 알아보자! 이 메모리의 주인이 나는 둘의 사이가 너무 킹받아서 죽여버리기로 결심을 했따. 물론 메모리 상에서만 ㅎㅎ
junpyo = nil
zandi = nil
이렇게 하면 나의 예상대로 메모리가 깔끔하게 사라져야 되는데 현실은 RC의 값이 둘다 1임으로 메모리 상에 살아서 아직도 나를 킹받게 하는 것이다...