NSNotificationCenter перехватывает и отслеживает все NSNotifications

Для лучшего понимания того, что происходит «под капотом», я хотел бы сделать полную трассировку любых уведомлений, происходящих в моем приложении.

Каким бы я ни был наивным, первое, что я попробовал, - это зарегистрироваться вот так:

Где-то в моем приложении:

{
    [...]
    [[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?

Спасибо за подсказку.

32
задан Till 16 September 2010 в 20:51
поделиться