Swift에서의 메모리 관리 방법(ARC)에 대해 설명하고, 순환 참조(Circular Reference)를 방지하기 위한 전략은 무엇인가요?

민경준·2024년 1월 7일
1
post-thumbnail

Description

Swift에서는 Auto Reference Counting을 통해 메모리를 관리하는데, 새 클래스 인스턴스가 생성 될 때 ARC는 해당 인스턴스에 대한 정보를 저장할 메모리를 할당한다. 그리고 더이상 해당 인스턴스가 필요 없을 때 메모리에서 할당 해제하여 공간을 차지 하지 않도록 보장한다.

좀 더 자세한 작동 방식을 보자면, ARC는 해당 인스턴스를 참조하고 있는 많은 상수와 변수를 추적한다. 그리고 해당 인스턴스에 대해 활성화 된 참조가 하나라도 없으면 메모리에서 해제시키는 방식이다.

순환 참조를 방지하기 위한 전략으로는 두 가지가 있는데, 약한 참조(weak)미소유 참조(unowned)가 있다.
두 전략의 차이점은 아래에서 서술하겠다.

순환 참조를 해결하기 위한 weak와 unowned 참조의 차이점은 무엇인가요?

약한 참조(weak)는 인스턴스를 참조하긴 하지만 해당 인스턴스가 먼저 할당 해제되어 nil값이 될 수 있는 경우에 사용하고, 미소유 참조(unowned)는 참조하는 쪽이 해당 인스턴스와 동시에 메모리에서 해제 되거나 먼저 해제되는 경우에 해당 인스턴스가 항상 존재 한다고 예측하고 사용한다.

ARC를 효과적으로 관리하기 위한 코드 작성 방법은 어떤 것이 있나요?

ARC를 효과적으로 관리하기 위해서는 강한 참조 순환을 해결해야 한다. 이를 해결 하기 위해서는 약한 참조(weak)와 미소유 참조(unowned)를 사용하고, 클로저 안에서는 두 참조를 캡처 리스트(capture list)를 통해 사용한다. 그리고 불필요한 객체를 메모리에서 해제 해주는것도 효과적인 관리 방법 중 하나이다. 이를 위해 deinit 메서드를 활용하거나 앱이 메모리 경고를 받았을 때 호출 되는 didReceiveMemoryWarning 메서드를 활용한다.

profile
iOS Developer 💻

0개의 댓글