Strong(강한 참조)
- 객체를 소유하여 래퍼런스 카운트가 증가하는 프로퍼티
- 값 지정 시점에 retain 되고, 참조가 종료되는 시점에 release가 됩니다.
Weak(약한 참조)
- 객체를 소유하지 않고 주소 값만을 가지고 있는 포인터 개념입니다.
- 자신이 참조는 하지만 weak 메모리를 해제시킬 수 있는 권하는 다른 클래스에게 있습니다.
- 값 지정 시 retain이 발생하지 않습니다.
- 메모리가 해제될 경우 자동으로 래퍼런스가 nil로 초기화시킵니다.
- weak 속성을 사용하는 객체는 항상 옵셔널 타입이어야 합니다.
- retain Cycle에 의해 메모리가 누수되는 문제를 막기 위해 사용되며, 대표적으로 delegate 패턴이 있습니다.
Unowned(미소유 참조)
- 자신이 참조하는 인스턴스의 retain count를 증가시키지 않습니다.
- nil이 될 수 없습니다.
- Optional로 선언되어서는 안 됩니다.
- unowned는 객체가 사라지게 되면 댕글링 포인터(포인터가 여전히 해제된 메모리 영역을 가리키고 있는 것)가 남습니다.
- 사용 상황 -
1, Strong(강한 참조)
- 래퍼런스 카운트를 증가시켜 ARC로 인한 메모리 해제를 피하고, 객체를 안전하게 사용하고자 할 때 사용합니다.
2, Weak(약한 참조)
- retain cycle에 의해 메모리가 누수되는 문제를 막기 위해 사용합니다.
- delegate 패턴이 있습니다.
3, Unowned(미소유 참조)
- 객체의 라이프사이클이 명확하고 개발자에 의해 제어 가능이 명확한 경우에 사용합니다.
- weak Optional 타입 대신 사용하여 좀 더 간결한 코딩이 가능합니다.
'iOS > iOS' 카테고리의 다른 글
NSCache와 NSDictionary의 차이를 설명하시오. (0) | 2022.06.09 |
---|---|
NSCache (0) | 2022.06.08 |
Stack View 스택뷰 (이론) (0) | 2022.06.04 |
ARC와 GC의 차이점 (0) | 2022.06.03 |
Frame과 Bounds의 차이는 무엇인가? (0) | 2022.06.02 |
댓글