「内部」で何が発生するかをよりよく理解するために、アプリケーション内で発生する通知を完全に追跡したいと思います。
私はナイーブですが、最初に試したのは次のように登録することでした。
私のアプリのどこか:
{
[...]
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(traceNotifications:) name:nil object:nil];
[...]
}
- (void)traceNotifications:(NSNotification *)notification
{
NSLog(@"received notification %@", [notification name]);
}
私は実際にその方法で多くの通知を受け取ります。しかし、ある時点でアプリケーションがクラッシュします。スタックトレースは、realizeClassのEXC_BAD_ACCESSでクラッシュしていることを示しています。これは、私の経験から、割り当て解除後に何かが呼び出されたことを示しています。私の観察対象はまだ生きていますが、そのデロケーターは(まだ)呼び出されていません。
次に試したのは、ブレークポイントを設定し、ブレークポイントがトラップされるたびにgdb-console内で-[NSNotificationCenter postNotification:]
実行することでした。po {NSNotification *}($ebp+16)
それはいくつかの通知を明らかにしましたが、私が期待/期待しているすべてではありませんでした。たとえば、私のアプリケーションは向きの変更を適切に処理しますが、デバイスの向きを変更するときに(シミュレーターで)通知がトラップされることはありません。
私は何が欠けていますか?NSNotificationCenterを確実に監視する方法(ツールなど)はありますか?
ヒントをありがとう。