Обновление
Добавьте вызов к методу init
MainViewController
// MainViewController.m
- (id)init;
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod) name:UIApplicationDidBecomeActiveNotification object:nil];
}
return self;
}
Обязательно удалите себя в dealloc
- (void)dealloc;
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
Делая это таким образом с самого момента появления объекта, он готов получать уведомления, а затем, когда его освобождают, он благополучно удаляет себя.
Хорошим примером для подражания является назначение класса, выполняющего наблюдения, регистрировать уведомления. Это обеспечивает хорошую инкапсуляцию и устраняет некоторый риск отправки уведомления на освобожденные экземпляры.
Обоснование
Вам необходимо сбалансировать свои звонки для регистрации уведомлений и отмены регистрации уведомлений, в противном случае может быть вызвано сообщение об освобожденном объекте, который может быть трудно отследить.
Если у меня есть класс, который необходимо уведомить о событии, вероятнее всего, что я буду регистрироваться для уведомлений в методе init
, а затем отменять регистрацию для уведомлений в dealloc
(init
и dealloc
это всего лишь примеры того, как я часто делаю это, не обязательно лучшее место в каждом примере, делайте то, что имеет смысл в вашем случае).