アプリでネットワークを必要とするオブジェクトの「インターネット対応」基本クラスがあります。インターネット対応である必要があるすべてのオブジェクトは、それを継承します。ご想像のとおり、私はこれらのオブジェクトの多くを割り当ておよび割り当て解除します。
インターネット対応の基本クラスには、インターネットステータスのチェックに使用される到達可能性クラスと対話するための次のコードがあります。
#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:]:割り当て解除されたインスタンス0x1e249a30に送信されたメッセージ
ゾンビをオンにして、Reachability.m内の次のコード行まで問題を追跡しました
NSCAssert([(NSObject*) info isKindOfClass: [Reachability class]], @"info was wrong class in ReachabilityCallback");
残念ながら、NSNotifcationsのリッスンを停止して通知機能を停止する以外に、このエラーを回避するためにオブジェクトが他に何ができるかわかりません。
どんな助けや提案も素晴らしいでしょう。
ありがとう
Vb
編集:
さて、以下の回答のアドバイスに従って、割り当てのある機器で実行しました。これが保持カウントの履歴でした。
私が疑ったように、私が割り当てを解除したオブジェクトは、私自身ではなく、Foundation(つまり、NSNotifcationCenter)によって呼び出されています。
私のインターネットオブジェクトには、Reachabilityオブジェクトへの強力なポインタがあります。それらの割り当てが解除されると、Reachabilityオブジェクトも割り当て解除されます。ゾンビは到達可能性オブジェクトです。インターネットオブジェクトのdeallocでremoveObserverを呼び出しましたが、Foundationはまだ割り当て解除されたオブジェクトを呼び出しています。理由がわからない...