얼마간만에 하는 블로그 포스팅인지 감개가 무량하다. 그동안 너무 소홀했던 것 같아 반성하며 매일같이는 아니더라도 뜨믐뜨믐 공부한 것을 적어내려가려 한다.
오늘은 기술면접대비를 하며 질문중 ARC란 개념을 접했다.
ARC? 먹는건가? 🙄
우선 검색부터 해보자...
앱의 메모리 사용량을 추적하여 자동적으로 관리하는 iOS의 메모리 기법으로
Reference Count(참조 횟수)를 계산하여 참조 횟수가 0이면 더이상 사용하지 않는 메모리로 판단하여 해제
① 인스턴스 생성시 해당 인스턴스에 대한 메모리를 할당
② 강한 참조(strong reference)를 통해, 현재 사용중인 인스턴스의 메모리 할당을 유지
③ 현재 인스턴스를 참조하는 속성, 상수, 변수의 count를 추적 ⇒ count가 하나 이상 존재하는 한, 인스턴스를 할당 해제하지 않는 것
현재 해당 인스턴스의 참조 유무를 숫자로 표현한 것
1. Count Up(+ 1):
2. Count Down(- 1):
인스턴스를 가리키던 변수가 메모리에서 해제되었을 때
nil이 지정되었을 때
변수에 다른 값을 대입한 경우
프로퍼티의 경우 속해 있는 클래스 인스턴스가 메모리에서 해제될 때
🐛 지금의 Swift가 아닌 Objective-C 언어를 사용하던 과거에는 수동(Manual)으로 참조 횟수를 계산하는 MRC(또는 MRR)를 사용했다고 한다.
두 개의 객체가 서로가 서로를 참조하고 있는 상태로 영구적으로 메모리가 해제되지 않을 가능성이 있다.
🐛 약한 참조는 인스턴스가 메모리에서 해제되었을 경우 자동으로 nil 을 할당해주기 때문에 무.조.건 옵셔널 변수로 선언 해야 하고, 미소유참조는 옵셔널 변수로 선언하지 않아도 된다.