스택에 저장된 데이터는 자동으로 제거되지만, 힙은 아니므로 직접 제거해야 한다.
메모리 관리 모델
- Objective-C에서는 MRC, ARC 사용 가능.
- Swift에서는 ARC 사용 가능.
ARC (Automatic Reference Counting)
- 컴파일러가 필요할 때 알아서 처리(메소드 끼워넣음)
Ownership Policy
소유 정책
- 인스턴스를 변수나 상수에 저장하면 변수나 상수가 인스턴스를 소유하게 됨
- 인스턴스는 소유자가 있으면 메모리에 유지됨
- 반대로 소유자가 없으면 메모리에서 제거
- 즉, 참조카운트 > 0 -> 유지
- 참조카운트 == 0 -> 메모리에서 제거
- 소유하게되는 과정에서 내부적으로 메소드가 실행되는데,
retain
이라는 메소드다.
- 소유권이 사라질 때는
release
라는 메소드가 실행된다.
Reference Count
ARC가 사용하는 3가지 참조
Strong Reference
- 인스턴스와 소유자는 기본적으로 strong reference
- retain시 RC +1, release시 RC -1
- 소유자가 하나라도 있다면 메모리에서 삭제되지 않음
- 값이 있던 옵셔널에 nil을 저장하는 것은 소유권을 포기하는것과 같다
- 혹은 인스턴스가 포함된 스코프가 끝나면 메모리에서 정리
- RC가 0이 되면 메모리에서 제거
Weak Reference
Unowned Reference