내 애플리케이션이 닫히면 주 컨트롤러 클래스는 모델에서 Observer로 자체 제거 된 다음 모델을 해제합니다. 이처럼 :KVO는 KVO 관측자가 등록되어 있지 않더라도 (또는 그럴 수 있습니까?)
는- (void)dealloc {
[theModel removeObserver:self
forKeyPath:@"myValue"];
[theModel release];
[super dealloc];
}
그리고 바로 그 후, 디버거는 말한다 :
2010-04-29 14 : 07 : 40.294 MyProgram [13678 : a0f] 인스턴스 클래스 TheModel의 0x116f2e880이 해제 된 동안 핵심 가치 옵저버는 아직 등록되어 있습니다. 관측 정보가 누출되어 다른 물체에 실수로 부착 될 수 있습니다. NSKVODeallocateBreak에 중단 점을 설정하여 디버거에서 여기서 중단합니다.
< NSKeyValueObservationInfo 0x100288450 > (
< NSKeyValueObservance 0x1002aca90 : 관찰자 : 0x116f40ec0, 주요 경로 : myValue, 옵션 : < 새로운 기능 : 여기에 현재 관측 정보입니다 YES, 올드 : NO, 이전 : NO > 컨텍스트 : 0x0으로, 속성 : 0x116f804300x116f2e880
실제로 모델이며0x116f40ec0
는 실제로 컨트롤러 >
)
.
컨트롤러가 관찰자로서 스스로 제거되었을 때 어떻게 여전히 관찰자가 될 수 있습니까?
GDB는 그런 말을하지 않습니다. 이것이 프로그램의 콘솔 출력입니다. GDB 출력에는 타임 스탬프, 프로그램 이름, PID 및 스레드 ID가 없습니다. 출력은 KVO 자체에서 발생합니다. 그에 따라 질문 제목을 수정했습니다. –