내 응용 프로그램에서 네트워킹이 필요한 개체에 대한 '인터넷 인식'기본 클래스가 있습니다. 인터넷 인식이 필요한 모든 객체가이 객체를 상속받습니다. 상상할 수 있듯이 많은 객체를 할당하고 할당을 해제합니다.Reachability Classes 충돌하는 프로그램 - 확실하지 않은 이유
인터넷 인식 기본 클래스에는 인터넷 상태를 확인하는 데 사용되는 도달 가능성 클래스와 상호 작용하는 다음 코드가 있습니다.
#import "Reachability.h"
- (id) init {
...
self.internetReachable = [Reachability reachabilityForInternetConnection];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus) name:kReachabilityChangedNotification object:nil];
[self.internetReachable startNotifier];
...
}
- (void) dealloc
{
[self.internetReachable stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
는 곧 내 응용 프로그램, 인터넷 상태에 변화가있는 한, 다음과 같은 오류와 응용 프로그램의 충돌 :
*** -[Reachability isKindOfClass:]: message sent to deallocated instance 0x1e249a30
필자의 다음 줄에 아래로 문제를 좀비 켜져 있고 추적 정지 NSNotifcations을 수신하고, 통지를 중지 넘어 Reachability.m
불행하게도NSCAssert([(NSObject*) info isKindOfClass: [Reachability class]], @"info was wrong class in ReachabilityCallback");
내 코드, 메신저 내 개체가이 오류를 방지하기 위해 할 수있는 다른 확실하지.
도움이나 제안이 도움이 될 것입니다.
감사
VB
편집 : 할당 와 악기를 실행하고이이 수를 유지하는 역사였다 아래
OK 그렇게 대답의 조언을 다음과 같습니다.
은 내가, 내가 재단 (즉. NSNotifcationCenter)이 아니라 자신에 의해 호출되는 할당 해제 한 그 객체를 의심 같습니다.
내 인터넷 개체에 Reachability 개체에 대한 강력한 포인터가 있습니다. 할당이 해제되면 Reachability 객체도 할당 취소됩니다. 좀비가 Reachability 개체입니다. 내 인터넷 객체의 dealloc에서 removeObserver를 호출했지만 파운데이션은 여전히 할당 해제 된 객체를 호출합니다. 이유를 이해할 수 없습니다 ...
감사합니다. 답변을 올렸습니다. 어떤 아이디어? – Vazzyb