notes
IOS - Swift 참조 한정자(Reference Qualifier)
Swift 참조 한정자의 의미·참조 방식과 메모리 관리 관련 개념 정리.
weak / unowned / strong — ARC에서 누가 소유하는지를 표시하는 한정자.
실무 감각: delegate·자식→부모는 거의 weak. unowned는 “상대가 나보다 무조건 오래 산다”가 확실할 때만 (아니면 크래시).
- strong: 기본값, 별도 표기 안 해도 됨
- weak: 항상 Optional, 해제되면 nil
- unowned: Non-Optional, 해제된 객체 접근 시 런타임 에러
1. strong (기본값)
- 강한 참조
- 객체의 소유권을 가짐(참조 카운트 증가)
- 별도 명시하지 않으면 모든 참조는 strong
- 객체가 해제되지 않음(순환 참조 주의)
var object: SomeClass? // strong이 기본
2. weak
- 약한 참조
- 객체의 소유권을 가지지 않음(참조 카운트 증가 X)
- 참조 대상이 해제되면 자동으로
nil이 됨 (항상 Optional) - 주로 delegate 패턴, 순환 참조 방지에 사용
weak var delegate: SomeDelegate?
3. unowned
- 비소유 참조
- 객체의 소유권을 가지지 않음(참조 카운트 증가 X)
- 참조 대상이 해제되면 접근 시 크래시 발생 (Optional 아님)
- 참조 대상이 자신보다 오래 살아있을 때 사용
unowned var owner: OwnerClass
4. 요약 표
참고:
- strong: 기본값, 별도 표기 안 해도 됨
- weak: 항상 Optional
- unowned: Non-Optional, 해제된 객체 접근 시 런타임 에러
delegate 붙일 때 weak 빼먹으면 순환 참조로 화면이 안 죽는 경험을 한 뒤에야 표가 머릿속에 남았다.