본문 바로가기
공부/[TIL]

[TIL] 220120 - Swift ARC

by 인생은아름다워 2022. 1. 21.

Swift는 ARC(Automatic Reference Counting)을 통해 메모리를 관리한다.

대충 비슷한 개념은 Java의 가비지컬렉션

 

메모리 관리 방식

참조 타입 인스턴스를 참조할 때 강한참조의 개수를 카운팅 하여 메모리를 관리

강한참조 카운트 개수가 1 이상인 경우 메모리에 할당, 0이면 메모리에서 해제하는 방식

-> 강한 참조 순환문제 발생 가능 -> 메모리 누수 발생

 

강한참조 순환 문제(Strong reference cycle)를 해결하기 위해 약한 참조(Weak reference), 미소유 참조(Unowned reference) 사용 가능

약한 참조 : 자동으로 nil을 할당할 가능성이 있기에 Optional value + 변수로 사용

미소유 참조 : 자동으로 nil을 할당해 주지 않기 때문에 Optional value가 아니어도 상관 없으며, 상수도 사용 가능, 다만 nil할당 후 접근하게되면 런타임 에러 발생

 

클로저의 강한참조 순환 문제

클로저 내부에서 인스턴스의 프로퍼티 또는 메서드에 접근할 경우 강한참조 발생

-> 강한참조 순환문제 발생 가능 -> 클로저의 획득(capture)특성 때문에 발생

 

클로저의 강한참조 문제를 해결하기 위해 획득 목록을 작성

-> 클로저의 참조 타입에 대하여 어떤 방식으로(강한, 약한, 미소유) 참조할지 미리 지정해주는 기능

-> 이를 통해 강한참조 순환 문제를 방지할 수 있음

-> 기존 개념과 똑같이 약한 참조의 경우 옵셔널value / 미소유 참조의 경우 어떤 value에도 사용 가능 다만 제 때 nil을 할당해주지 않으면 런타임 에러 발생 가능!

댓글