티스토리 뷰

값 타입과 구별되는 참조타입(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

https://yudonlee.tistory.com/36

https://zeddios.tistory.com/1213

최근에 올라온 글
Total
Today
Yesterday