본문 바로가기
iOS/iOS

참조의 종류 [Strong, Weak, Unowned]

by 황민우 2022. 6. 7.

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

댓글