내 클래스 중 하나에서 키 - 값 관측을 사용하려고합니다. 관찰자를 init 메서드에 등록하고 dealloc에서 제거/등록 취소하지만 내 디버그 인쇄 결과에 따라 dealloc 메서드가 호출되기 전에 다음과 같은 오류가 발생합니다.옵저버는 언제 제거해야합니까? 옵저버를 제거하기 전에 객체를 할당 해제하는 중 오류가 발생했습니다.
TekkPoint 클래스의 인스턴스 0x583870은 키 값 옵저버가 아직 등록되어있는 동안 할당 해제 중입니다. 관측 정보가 유출되고 다른 개체에 실수로 첨부 될 수 있습니다. NSKVODeallocateBreak에 중단 점을 설정하여 디버거에서 여기서 중단합니다. 다음은 현재 관측 정보입니다 ( 컨텍스트 : 0x0으로, 속성 : 0x536400> 상황 : 0x0으로는, 건물 : 0x55aba0> )
내가 관찰자를 제거해야합니다 특별한 방법이 있나요? 아니면 내가 그들을 제거해야하는 특정 장소?
이 내용에 따르면 question 일을 올바르게하고 있지만 왜이 오류 메시지가 표시됩니까? 여기
내 할당 해제 루틴입니다 : 그건 내 구현에 대한 이상한 수 있습니다주의해야 할- (void)dealloc {
// Remove all observers.
for (NSString *path in [TekkPoint observedPaths]) {
[self removeObserver:[option_ tChart]
forKeyPath:path];
}
[description_ release];
[weight_ release];
[super dealloc];
}
한 가지 내가 추가하고 observee에서 관찰자를 제거, 이건 내 문제가 발생할 수 오전입니까?
남자이 답변은 내 생명을 구한 것입니다. 왕 –
간단하고 쉽습니다. +1 – govi
또 다른 옵션은 관찰하는 개체에서 관찰되는 개체에 대한 강력한 참조를 만드는 것입니다. 이렇게하면 관측 대상이 해제 될 때까지 관찰 대상이 해제되지 않습니다. – Avario