2013-04-30 11 views
30

Se una classe si registra per eventi NSNotificationCenter di un determinato tipo e un'altra classe pubblica un evento di quel tipo, il codice nel ricevitore verrà eseguito prima (in modo sincrono) o dopo (in modo asincrono) la classe di pubblicazione continua?Gli eventi di NSNotificationCenter sono ricevuti in modo sincrono o asincrono?

- (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"); 
} 

Nell'esempio di codice sopra, "Hello from receiver" verrà stampato prima o dopo "Hello from caller"?

+0

basta dare un'occhiata a http://stackoverflow.com/questions/1900352/what-is- notnotification –

+0

leggere il post originale di seguito answer..http: //stackoverflow.com/questions/7880742/ios-are- metodi-chiamati-per-delegati-e-osservatori-eseguiti-sul-thread principale – BhushanVU

risposta

65

Come indicato nella documentazione per NSNotificationCenter NSNotificationCenter Class Reference le notifiche vengono registrate in modo sincrono.

Un centro notifiche invia notifiche agli osservatori in modo sincrono. In altre parole, la postNotifica: i metodi non vengono restituiti finché tutti gli osservatori non hanno ricevuto ed elaborato la notifica. Per inviare notifiche in modo asincrono, utilizzare NSNotificationQueue.

In un'applicazione con multithreading, le notifiche vengono sempre consegnate nel thread in cui è stata pubblicata la notifica, che potrebbe non essere la stessa discussione in cui un osservatore si è registrato.

Spero che ti aiuti.

+3

Risposta breve e appropriata !! –

+0

Non capisco il termine "sincrono" o la tua risposta è completamente errata. Volevo chiamare nel seguente ordine: 1) notifica; 2) il gestore della notifica; 3) codice nello stesso blocco nella notifica. Ma è chiamato come 1, 3, 2 - ordine errato – Gargo

+0

@Gargo se non si capisce la risposta che non significa che la risposta non è corretta. Questa è la risposta corretta e accettata. –

Problemi correlati