Для лучшего понимания того, что происходит "под капотом", я хотел бы сделать полный след любых уведомлений, происходящих в моем приложении.
Наивный, как я, первое, что я пробовал, регистрировалось следующим образом:
Где-то в моем приложении:
{
[...]
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(traceNotifications:) name:nil object:nil];
[...]
}
- (void)traceNotifications:(NSNotification *)notification
{
NSLog(@"received notification %@", [notification name]);
}
Я действительно получаю несколько уведомлений таким образом. Но в какой-то момент приложение рушится. Трассировка стека показывает, что он сбой с EXC_BAD_ACCESS в реализации classClass, который, по моему опыту, указывает на то, что что-то вызывается после его освобождения. Однако мой наблюдательный объект все еще жив, его деллалокатор еще не был назван (пока).
Затем я попытался установить точку останова в направлении -[NSNotificationCenter postNotification:]
, а затем запустить po {NSNotification *}($ebp+16)
внутри консоли gdb всякий раз, когда моя точка останова попадает в ловушку. Это показало несколько уведомлений, но не все, что я ожидаю/надеюсь. Например, мое приложение правильно обрабатывает изменения ориентации, но я не вижу, чтобы какие-либо уведомления были захвачены при переориентации устройства (в симуляторе).
Что мне не хватает? Есть ли способ (например, инструмент) для надежного наблюдения за NSNotificationCenter?
Спасибо за любой намек.