【发布时间】:2011-04-13 02:51:41
【问题描述】:
为了更好地了解“幕后”发生的事情,我很乐意对我的应用程序中发生的任何通知进行完整跟踪。
虽然我很天真,但我尝试的第一件事是这样注册:
在我的应用程序中的某处:
{
[...]
[[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:] 的断点,然后每当我的断点被捕获时在gdb-console 中运行po {NSNotification *}($ebp+16)。这确实揭示了一些通知,但不是我所期待/希望的全部。例如,我的应用程序确实正确处理了方向更改,但在重新定向设备时(在模拟器中)我没有看到任何通知被捕获。
我错过了什么? 是否有可靠地观察 NSNotificationCenter 的方法(例如工具)?
感谢任何提示。
【问题讨论】:
-
走得更远了——断点方法似乎指向了正确的方向......我依赖于系统正在使用objective-c方法调用这一事实,它并不适用于所有人在使用过的通知中,我必须在某个时候捕获 CFNotificationCenter ......将继续尝试......
-
自发布此问题以来,Spark Inspector sparkinspector.com 已发布,它附带了一个用于监控(和重新发送)NSNotifications 的工具。
标签: iphone trace nsnotifications