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