변수의 키워드(메모리)에 관하여
일단 기본적으로 인스턴스(클래스, 구조체, 이넘)은
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이 안되어야하는 상황에서 사용(오 이런 차이가)