본문 바로가기
iOS/iOS

Delegate는 retain이 되는가? 안되는가?

by 황민우 2022. 5. 2.

Delegate

 

- 대리자

- 어떤 객체가 해야 할 일을 부분적으로 확장해 대신 처리해주는 역할을 합니다.

- 객체의 행동을 단순화하면서, 객체 간의 결합성을 최소화시키는데 장점이 있습니다.

- 메세지를 수신받는 객체가 많을 시 Notification을 사용하고, 하나의 객체가 여러 가지 요구를 받는다면 Delegate를 사용합니다.


Retain

 

- 메모리가 해제되지 않아서 낭비되는 현상을 의미합니다.

- 두 클래스 인스턴스가 서로 강한 참조를 하게되면 Retain Cycle이 발생합니다.

 


문제에 대한 답?

 

- Delegate는 객체 간의 작업이기 때문에 참조 값을 사용합니다.

- 참조값을 주고받기 때문에 retain 현상이 일어납니다.

 

 

해결 방법

 

- Weak 선언 (약한 참조)하면, 강한 참조가 되지 않아 객체의 메모리가 해제되면 자동으로 nil이 됩니다.

- Unowned (약한 참조) 선언하면, 해제된 메모리 영역에 재접근하지 않는다는 확신이 있을 때 사용합니다.


내용 출처

https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/14

 

<3주차> Delegate란 무언인가 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오. · Issue #1

 

github.com

 

댓글