Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are NSNotificationCenter events received synchronously or asynchronously?

If a class registers for NSNotificationCenter events of a certain type and another class posts an event of that type, will the code in the receiver execute before (synchronously) or after (asynchronously) the posting class continues?

- (void)poster {     [[NSNotificationCenter defaultCenter]         postNotificationWithName:@"myevent"         object:nil];     NSLog(@"Hello from poster"); }  - (void)receiver {     [[NSNotificationCenter defaultCenter]         addObserver:self         selector:@selector:(mySelector)         name:@"myevent"         object:nil]; }  - (void) mySelector:(NSNotification *) notification {     NSLog(@"Hello from receiver"); } 

In the code example above, will "Hello from receiver" be printed before or after "Hello from caller"?

like image 673
Munna89 Avatar asked Apr 30 '13 11:04

Munna89


1 Answers

As stated in the documentation for NSNotificationCenter NSNotificationCenter Class Reference notifications are posted synchronously.

A notification center delivers notifications to observers synchronously. In other words, the postNotification: methods do not return until all observers have received and processed the notification. To send notifications asynchronously use NSNotificationQueue.

In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself.

Hope it helps you.

like image 137
Nishant Tyagi Avatar answered Oct 02 '22 14:10

Nishant Tyagi