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을 할당해주지 않으면 런타임 에러 발생 가능!
'공부 > [TIL]' 카테고리의 다른 글
[TIL] 220125 - iOS의 View 체계 (0) | 2022.01.27 |
---|---|
[TIL] 220122 - Auto Layout 기본적인 내용 (0) | 2022.01.24 |
[TIL] 220113 - Swift Generic (0) | 2022.01.13 |
[TIL] 220112 - 요소(UIButton, UILabel)들의 특징을 알고 쓰자(공식문서를 읽자) (0) | 2022.01.12 |
[TIL] 220111 - 아이폰에 앱 무선으로 빌드 및 디버그하기! (0) | 2022.01.11 |
댓글