ARC(Automatic Reference Counting)는 컴파일 시점에 retain relase 와 같은 메모리 관리 메소드를 자동으로 삽입해줍니다. 가비지 컬렉터(Garbage collection)와 달리 참조사이클을 자동으로 처리하지 않기 때문에, 객체에 대해 강한참조가 남아 있는한 해당 객체는 메모리 해제가 되지 않게 됩니다.
따라서, 서로 다른 객체가 서로를 강하게 참조하게 되면 순환참조가 발생해 메모리 누수(Memory Leak)가 발생됩니다.
weak는 객체를 계속 추적하면서 객체가 사라지게 되면 nil로 바꿉니다.
하지만, unowned는 객체가 사라지면 댕글포인터가 남습니다. 그래서 이 댕글포인터를 참조하게 되면 crash가 나는데 이 때문에 unowned는 사라지지 않을 거라고 보장되는 객체에만 설정하는 것이 crash가 발생하는 것을 방지하는 것에 도움이 됩니다.
"안전성을 위해 unowned 대신 weak만 사용하면 되지 않을까?”
안전하게 가려면 unowned 대신 weak만 사용해도 됩니다.
하지만, unowned를 사용하는 이유는
weak는 객체를 계속 추적하고 있다고 했죠? 이렇게 계속 객체를 추적하고 있는 것도 런타임시 오버헤드라고 생각해서 확실한 객체에는 unowned를 사용하는 것입니다.
'swift > 잡다함' 카테고리의 다른 글
| extension, protocol, Higher_Order_Func (0) | 2021.06.16 |
|---|---|
| 기본 클로저 사용 (0) | 2021.06.07 |
| mutating (0) | 2021.02.17 |
| lazy (0) | 2021.02.17 |
| 구조체, 클래스 차이 (0) | 2021.02.17 |