-
Notifications
You must be signed in to change notification settings - Fork 1
Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오. #34
Copy link
Copy link
Open
Labels
Description
Delegate
디자인 패턴으로 클래스나 구조체의 책임 중 일부분을 다른 타입의 인스턴스에게 전달(위임)하는 역할을 하는 것입니다.
Delegate Pattern
위임자를 갖고 있는 객체가 다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴이다.
Delegate Pattern 동작 방식
- Delegate Protocol을 선언한다.
- 일을 전달하는 ViewController 내 프로퍼티에 Delegate를 저장한다.
- 일을 전달받을 ViewController에서 전달하는 ViewController 내 Delegate를 저장한 프로퍼티를 자신으로 위임자로 삼는다.
- 일을 전달받을 ViewController에서 일을 처리한다.
Delegate Pattern을 사용하면 retain되는 이유
Delegate Pattern을 사용하면 두개의 클래스가 서로 참조하는 상황이 필연적으로 발생한다.
이 때 일을 전달받을 ViewController에서 Delegate를 처리 후 일을 전달하는 ViewController는 이미 deinit이 되었기 때문에 일을 전달받은 입장에선 메모리를 해제할 수 없다.
따라서 메모리를 정상적으로 해제하려면 weak키워드를 붙여 MemoryLeak이 발생하지 않도록 해주어야한다.
Reactions are currently unavailable