2011-03-25 6 views
3

가상 시나리오 :추가 관찰자의 원인 EXC_BAD_ACCESS

나는 정의 알림 (예를 들어, 통지 MyFooNotification)에 대한 관찰자로 뷰 컨트롤러를 추가하고 내 viewDidLoad 방법에서

. 나중에 뷰가로드 될 때 프로세스에 알림이 게시되고 컨트롤러가이를 처리합니다. 내가보기에 컨트롤러를 떠날 때 viewDidUnload에서 관찰자를 (의도적으로) 제거하지 마십시오. 다음 번에 뷰를 열면 관찰자가 다시 추가되지만 이제는 관찰 된 알림이 게시 될 때 - EXC_BAD_ACCESS이됩니다.

아무도 왜 이런 일이 일어날 지 설명 할 수 있습니까?

P. 나는 그것을 제거해야한다는 것을 알고 있습니다 viewDidUnload 나는 하위 레벨에 대해 궁금합니다.

+0

음향이 무언가가 방출되고있어 야하지 않아야합니다. –

답변

5

원래보기 컨트롤러가 탐색 스택 (또는 유사한)에서 튀어 나와서 할당 취소되었지만 NSNotificationCenter에 여전히 참조가 있기 때문에 가능성이 높습니다. 따라서 알림이 다시 게시되면 NSNotificationCenter은 지금 할당 해제 된보기 컨트롤러에 알리고 그 결과로 EXC_BAD_ACCESS을 얻습니다.

의 경우 개체가 NSNotificationCenter에 옵서버로 추가되는 경우 dealloc 중에 제거해야합니다.