Вопрос

Существуют ли какие-либо проблемы с состоянием гонки при использовании NSNotifications в одном потоке?Вот пример метода:

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

}

Первые два вызова после условия вызовут NSNotifications, которые будут получены mainPane.Гарантировано ли, что mainPane получит сообщение playerToggled после этих уведомлений?Я должен сказать, что этот код, похоже, работает так, как хотелось (playerToggled всегда выполняется последним).Но я не уверен, какие проблемы со сроками связаны с уведомлениями, и не могу найти конкретного ответа.

Это было полезно?

Решение

Я не совсем понимаю, что вы имеете в виду, но думаю, что это будет вам полезно:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Notifications/Articles/NotificationQueues.html#//apple_ref/doc/uid/20000217

Особенно эта часть:Использование postNotification NSNotificationCenter:и его варианты, вы можете опубликовать уведомление в центре уведомлений.Однако вызов метода синхронный:прежде чем объект публикации сможет возобновить свой поток выполнения, он должен дождаться, пока центр уведомлений не отправит уведомление всем наблюдателям и не вернется.

Другие советы

Никаких условий гонки ожидать не стоит.В дополнение к ответу Дэна Дональдсона, вот еще одна цитата из документации NSNotificationCenter:

Центр уведомлений синхронно доставляет уведомления наблюдателям.Другими словами, postNotification:методы не возвращаются до тех пор, пока все наблюдатели не получат и не обработают уведомление.Для асинхронной отправки уведомлений используйте NSNotificationQueue.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top