Delegate
디자인 패턴으로 클래스나 구조체의 책임 중 일부분을 다른 타입의 인스턴스에게 전달(위임)하는 역할을 하는 것입니다.
Delegate Pattern
위임자를 갖고 있는 객체가 다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴이다.
Delegate Pattern 동작 방식
- Delegate Protocol을 선언한다.
- 일을 전달하는 ViewController 내 프로퍼티에 Delegate를 저장한다.
- 일을 전달받을 ViewController에서 전달하는 ViewController 내 Delegate를 저장한 프로퍼티를 자신으로 위임자로 삼는다.
- 일을 전달받을 ViewController에서 일을 처리한다.
Delegate Pattern을 사용하면 retain되는 이유
Delegate Pattern을 사용하면 두개의 클래스가 서로 참조하는 상황이 필연적으로 발생한다.
이 때 일을 전달받을 ViewController에서 Delegate를 처리 후 일을 전달하는 ViewController는 이미 deinit이 되었기 때문에 일을 전달받은 입장에선 메모리를 해제할 수 없다.
따라서 메모리를 정상적으로 해제하려면 weak키워드를 붙여 MemoryLeak이 발생하지 않도록 해주어야한다.
Delegate
디자인 패턴으로 클래스나 구조체의 책임 중 일부분을 다른 타입의 인스턴스에게 전달(위임)하는 역할을 하는 것입니다.
Delegate Pattern
위임자를 갖고 있는 객체가 다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴이다.
Delegate Pattern 동작 방식
Delegate Pattern을 사용하면 retain되는 이유
Delegate Pattern을 사용하면 두개의 클래스가 서로 참조하는 상황이 필연적으로 발생한다.
이 때 일을 전달받을 ViewController에서 Delegate를 처리 후 일을 전달하는 ViewController는 이미 deinit이 되었기 때문에 일을 전달받은 입장에선 메모리를 해제할 수 없다.
따라서 메모리를 정상적으로 해제하려면
weak키워드를 붙여 MemoryLeak이 발생하지 않도록 해주어야한다.