Objective C로 프로그램을 만들다 보면 Delegate를 많이 사용하게 된다. 이때 주의해야 할 점이 몇가지가 있다.

1. 델리게이트는 Property를 사용해서 관리하라

- 초기화 시점에서 델리게이트 입력 받아 초기화 내에서 델리게이트를 멤버변수에 넣어도 우선 Property를 만들어 Property로 할당하게끔한다.

2. 델리게이트 Property 속성은 대부분 assign이여야 한다.

- retain 속성으로 지정하게 되면 델리게이트를 등록된 부모 클래스에서는 메모리가 해제되지 않고 계속 남아 릭이 발생하는 경우가 생긴다. 델리게이트의 목적은 부모를 참조하는 개념이기 때문에 assign을 사용하여 retain Count를 잡아두지 말아야 한다.

- 하지만 비동기처리시 역활을 수행시 역활을 호출한 이후 자신의 객체가 소멸될 경우가 발생되면 오히려 문제가 생기게 된다.(NSOperation의 네트워크 비동기 접속시)
 이런 경우 자신의 오너십을 역활을 수행하는 대상에게 넘기야 하는데 이때 받아들이는 델리게이트 속성을 retain으로 해야한다. 하지만 비동기 처리가 끝나는 시점에서 반드시 등록했던 오너쉽을 해지해야한다.

3. 사용이 끝난 객체내 델리게이트는 dealloc될 경우 nil로 초기화 시킨다.

A -> B 의 관계에서 A클래스는 B클래스를 호출하여 사용할 때 델리게이트를 등록하게 되는데 A클래스를 해제하는 시점은 dealloc 에서는 delegate를 반드시 초기화 시켜주어야 한다. 이렇게 하지 않을 경우 쓰레드나 performSelector등을 사용할 경우 이미 해제된 delegate에 접근을 시도하여 크래쉬를 발생시키는 원인이 된다. 꼭 dealloc뿐만 아니라 viewDidDisappear등에서 해줘도 무방하다 (대신 viewDidAppear에 다시 delegate를 할당해주어야한다)

+ Recent posts