정리 X/Swift

변수의 키워드(메모리)에 관하여

va95 2021. 2. 5. 22:05

일단 기본적으로 인스턴스(클래스, 구조체, 이넘)은

1. 값 타입 : 구조체, 이넘 <- 얘도 주소값으로 접근할 수 있던데.. 나중에 알아보자(ex. swap)

2. 참조 타입(주소값) : 클래스

두 가지 중 하나인 건 알고..

 

 

************************

매우 중요

 

클래스는 힙 영역에 존재하고

해당 클래스를 가리키는 참조 횟수를 센다!

 

참조 횟수가 0이 되면 자동으로 힙 영역에서 지워주는

Automatic Reference Counting(ARC) 기법을 사용 ( != garbage collection)

************************

 


 

참조 타입은 아래 3가지로만 선언이 가능한데

strong, weak, unowned 이다.

 

1. strong <- default 임 얘가(keyword는 안씀)

얘가 카운팅 횟수 1 증가시킴

힙영역에 기록해놓음

 

 

2. weak

얘는 카운팅 횟수 증가 시키지 않고 ~ 힙에 없으면 nil을 줌 -> 옵셔널로 선언해야함

보통 IBOutlet은 상위 뷰가 strong으로 가지고 있기 때문에 딱히 strong 안해도됨

상위 뷰 없애고 IBOutlet을 그대로 남기고 싶다면 strong으로~

 

 

3. unowned

얘도 카운팅 횟수 증가 시키지 마라

서로 참조하고 있으면 순환되서 heap에서 사라지지 않는 문제 -> 얘로 해결하기도 하지만 보통 weak로 해결

+ weak는 nil이 되지만 unowned는 nil이 될 수 없음! 강한 에러 내는데 적합함

꼭 nil이 안되어야하는 상황에서 사용(오 이런 차이가)