0

관찰자 제거와 관련하여 기본적인 질문이 있습니다.iOS - dealloc을 사용하여 관찰자 제거

3 개의 ViewController 하위 클래스에 상속 된 ViewController 상위 클래스가 있습니다. 예. BookVC이 -> BookHotelVC, BookFlightVC, BookTrainVC 여기

, 나는 부모 클래스의 viewDidLoad에서 관찰자를 추가 부모 클래스로 작성하는 방법을 통지한다 (I 아동 ViewControllers에 [super viewDidLoad]을). 내 코드 -

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(BookingCompleted:) name:@"BookingCompleted" object:nil]; 

지금 내가 자식 ViewControllers의에서 멀리 이동할 때 관찰자를 제거하고 싶지만, ARC이 허용하지 않기 때문에 나는 각 아동의 ViewController의 dealloc[super dealloc]을 쓸 수 없습니다.

어떻게 설정되어있는 옵저버를 제거 할 수 있습니까? 왜냐하면 내가 하위 ViewController로 이동할 때마다 이상한 일들을 일으키는 새로운 관찰자가 추가되기 때문입니다 (예 : 그 메소드를 두 번/세 번 호출 ... - 두 번 경고/세 번 호출 ...).

친절히 제안합니다.

답변

0

super으로 전화하지 마세요. ARC에서는 필요하지 않습니다 (http://clang.llvm.org/docs/AutomaticReferenceCounting.html#dealloc 참조).

-(void)dealloc { 

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 

} 
+0

을 당신은 내가해야 의미 부모 클래스 자체에'dealloc'을 작성 하시겠습니까? 그것이라면, 나는 처음부터 그것을했지만, 불리지는 않았다. – cheeseRoot

+0

@ pRimei5 해당 개체에 대한 모든 참조가 해제 되었습니까? –

1

잘, (당신이 본대로 ARC 활성화와 함께, 컴파일러는 당신을 못하게) [super dealloc]를 호출하지 않습니다되고 dealloc의 관찰자를 제거, 간단하게 쓰기 :

- (void)dealloc { 
    [self removeYourObservers]; 
} 
+0

ARC를 사용하면 명시 적으로 dealloc을 호출 할 수 없습니다. –

+0

@ JulianKról이 사실을 더 잘 반영하기 위해 내 대답을 업데이트했습니다. –

+0

단어 필요가 제 의견에 맞지 않습니다. 단순히 사용할 수 없습니다. –