Pergunta

Existem problemas de condição de corrida ao usar o nsnotificações em um único thread? Aqui está um método de amostra:

- (void) playerToggled: (NSNotification *) notification {
if (timerPane.playing && ! timerPane.paused) {
    [playerPane toggleCurrentPlayer];
    [timerPane toggleTimer];
    [mainPane playerToggled];
}

}

As duas primeiras chamadas após a condição acionarão as NSNotificações que serão recebidas pelo Mainpane. O Mainpane é garantido para receber a mensagem PlayerTogggled após essas notificações? Devo dizer que esse código parece funcionar conforme desejado (o Playertoggled sempre é executado por último). Mas não tenho certeza de quais problemas de tempo existem em torno das notificações e não consigo encontrar uma resposta específica.

Foi útil?

Solução

Não sei exatamente o que você quer dizer, mas acho que isso será útil para você:

http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/notifications/articles/notificationqueues.html#/pple_ref/doc/uid/20000217

Especialmente esta parte: usando a pós -Notificação do NSNotificationCenter: Método e suas variantes, você pode postar uma notificação em um centro de notificação. No entanto, a invocação do método é síncrona: antes que o objeto de postagem possa retomar seu encadeamento de execução, ele deve esperar até que o centro de notificação envie a notificação a todos os observadores e retornos.

Outras dicas

Não há condições de raça de se esperar. Além da resposta de Dan Donaldson, aqui está outra citação dos documentos para o NSNotificationCenter:

Um centro de notificação oferece notificações aos observadores de maneira síncrona. Em outras palavras, a pós -notificação: os métodos não retornam até que todos os observadores tenham recebido e processado a notificação. Para enviar notificações, use assíncrono nsnotificationQueue.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top