KVO 및 ARC 제거 방법

ARC 아래의 물체에서 관찰자를 어떻게 제거 합니까? 관찰자를 추가하고 제거하는 것을 잊었습니까? 더 이상 수동으로 메모리를 관리하지 않으면 관찰에서 물러나야할까요?

예를 들어, 뷰 컨트롤러에서 :

[self.view addObserver:self
            forKeyPath:@"self.frame"
               options:NSKeyValueObservingOptionNew
               context:nil];

이전 removeObserver:에는 뷰 컨트롤러의 dealloc메서드를 호출 했습니다 .



답변

-dealloc키 값의 관찰을 제거하기에 적절한 장소 인 ARC에서 여전히 구현할 수 있습니다 . [super dealloc]더 이상이 메서드 내에서 호출하지 않습니다 .

-release이전 에 재정의했다면 잘못된 방식으로 일을하고있는 것입니다.


답변

이 코드로 수행

- (void)dealloc
{
@try{
    [self.uAvatarImage removeObserver:self forKeyPath:@"image" context:nil];
} @catch(id anException) {
    //do nothing, obviously it wasn't attached because an exception was thrown
}
}


답변

스택 오버플로의 다른 곳 에서 Chris Hanson은이 목적을 위해 finalize 메서드를 사용하고 소유자가 개체가 완료되었음을 알릴 수 있도록 별도의 무효화 메서드를 구현할 것을 권장합니다. 과거에 저는 Hanson의 솔루션이 잘 고려되어 있다는 것을 알았으므로 그와 함께 할 것입니다.


답변