ARC
Automatic Reference Count
- 컴파일 타임에 동작
Strong: 객체를 직접 참조. 참조 카운트를 증가시켜 객체가 해제되지 않도록 보장
Unowned: 객체를 직접 참조. Strong RC가 0이 되면 접근 시 런타임 에러 (assertion failure)
Weak: Side Table을 통해 간접 참조. Strong RC가 0이 되면 자동으로 nil 반환. Side Table은 첫 번째 weak 참조가 생길 때 생성됨
순환참조 찾는 방법
- Instrument - Leak
- Graph
CFRetainCount로 디버깅
- 메모리 증감 살피기
- deinit
autoReleasepool
- 해당 블록 내에서 Objective-C 브리징 객체나 Foundation API가 반환하는 autorelease 객체들의 해제 시점을 블록 종료 시점으로 제어한다.
- 순수 Swift 객체에는 autorelease 개념이 없음 (Obj-C 브리징 시 주로 사용)
Value Type | Refernece Type
왜 value type이 Reference type보다 빠를까?
- Heap 메모리 선언시 오버헤드가 크기 때문이다.
- Heap 메모리 저장하기 위한 Heap 메모리 탐색
- Heap 저장한 메모리를 멀티 스레드에 sync 맞추기
- 해제 과정도 멀티 스레드에 반영해야 함
Dynamic | Static Dispatch