값 타입과 구별되는 참조타입(Reference) Class들은 heap에 저장
메모리는 자동 관리(ARC) : 어떤 것을 가리키고 있는 포인터 탐지 및 참조횟수가 0일 시 놓아버림
평소에는 ARC에 대해 생각하지 않아도 되지만 ARC에 영향을 줄 수 있는 몇 가지 방법이 있음
ARC에 영향을 주는 변수 사용시의 키워드
- strong, weak, unowned
strong
default값. 기본적인 Reference Counting(참조 집계) 방식
힙 안에 있는 것들을 포인터가 더 이상 그것을 가리키지 않을때까지 힙에 머물도록 강제
weak
힙에 있는 것에 아무도 관심이 없다면 힙에서 제거할 수 있다(nil로 설정)
힙에 있는 어떤 것을 가리키고 있지만 그 안에 뭐가 있는지는 그만큼 관심이 없어서 사라지면 nil로 설정
옵셔널 타입 참조포인터에만 적용됨. 힙에 어떤것도 저장해두지 않음
* outlet - 자동으로 weak 설정
UILabel의 경우 UILabel의 상위뷰는 UILabel에 대한 strong 포인터를 가지고 있음
outlet을 힙 안에 넣어두지 않아도 됨(뷰 계층에 따라 알아서 힙에 보관)
unowned
참조횟수를 세지 말라는 의미(추적하지 않음)
항상 메모리에 있는 작은 공간을 가리킴
포인터로 가리키는 것이 거기 있다는 것을 확인해야함
unowned 포인터가 있는데 참조를 나중에 하고 참조한 것이 힙 밖으로 버려지면
더 이상 strong포인터가 존재하지 않을 테니 앱이 충돌됨
서로 다른 객체가 직간접적으로 서로를 가리키는데 메모리 안에 둘다 보관 → unowned으로 연결을 깰 수 있음
※ 이해를 위해 참고한 블로그
https://yudonlee.tistory.com/35
'iOS > 스탠포드 iOS 강의' 카테고리의 다른 글
[스탠포드iOS] 익스텐션(Extensions) (0) | 2024.03.27 |
---|---|
[스탠포드iOS] 클로저(Closure) (0) | 2024.03.26 |
[스탠포드iOS] ViewController 생명주기 (0) | 2024.03.25 |
[스탠포드iOS] Gestures (1) | 2024.03.22 |
[스탠포드iOS] Text & Image (0) | 2024.03.20 |