为了更好地理解“幕后”发生的事情,我很乐意对我的应用程序中发生的任何通知进行完整跟踪。
虽然我很天真,但我尝试的第一件事就是这样注册:
在我的应用程序的某个地方:
{
[...]
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(traceNotifications:) name:nil object:nil];
[...]
}
- (void)traceNotifications:(NSNotification *)notification
{
NSLog(@"received notification %@", [notification name]);
}
实际上,我确实以这种方式收到了许多通知。但在某些时候,应用程序确实崩溃了。堆栈跟踪显示它在 implementationClass 中因 EXC_BAD_ACCESS 而崩溃,根据我的经验,这确实表明某些东西在其释放后被调用。然而我的观察对象仍然活着,它的释放器还没有被调用。
接下来我尝试设置一个断点-[NSNotificationCenter postNotification:]
,然后po {NSNotification *}($ebp+16)
在我的断点被捕获时在 gdb-console 中运行。这确实揭示了一些通知,但不是我所期待/希望的全部。例如,我的应用程序确实正确处理了方向更改,但在重新定向设备时(在模拟器中)我没有看到任何通知被捕获。
我错过了什么?是否有可靠地观察 NSNotificationCenter 的方法(例如工具)?
感谢您的任何提示。