Ответ 1
На самом деле есть gottcha; вы рухнете случайно! Это был мой опыт. Это связано с тем, что объект, получающий уведомление, делает это в том же потоке, что и отправитель уведомлений.
Из Документация Apple iOS в Центрах уведомлений:
В многопоточном приложении уведомления всегда передаются в поток, в котором было отправлено уведомление, которое может быть не тот же поток, в котором наблюдатель зарегистрировал себя.
Это неизбежно вызовет у вас головные боли.
Если уведомление получено чем-то в основном потоке, я обнаружил, что всплывающее сообщение в основном потоке из фонового потока, чтобы выдать уведомление, является самым безопасным способом для этого. Это довольно просто:
//Call this to post a notification and are on a background thread
- (void) postmyNotification{
[self performSelectorOnMainThread:@selector(helperMethod:) withObject:Nil waitUntilDone:NO];
}
//Do not call this directly if you are running on a background thread.
- (void) helperMethod{
[[NSNotificationCenter defaultCenter] postNotificationName:@"SOMENAME" object:self];
}
К сожалению, это вводит тонкую связь между отправителем и получателем в том, что вы изменяете отправителя для размещения приемника.
Еще лучшее решение, как указывает XJones, заключается в том, чтобы отправитель отправил уведомление о любом потоке, который он решает, а затем чтобы слушатель отвечал за использование соответствующего потока для выполнения любых действий, в которых он нуждается.
Надеюсь, что это было полезно.