Размещение NSNotification в основном потоке


Я нашел следующий фрагмент кода, который позволяет NSNotification для публикации в основном потоке из любого фонового потока. Я хотел бы знать, является ли это безопасной и приемлемой практикой, пожалуйста?

dispatch_async(dispatch_get_main_queue(),^{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ImageRetrieved" 
                                                        object:nil 
                                                      userInfo:imageDict];
});
4 53

4 ответа:

да.

Как правило, вы хотите, чтобы NSNotifications отправлялись на main, особенно если они запускают действия пользовательского интерфейса, такие как отклонение модального диалогового окна входа.

Доставка Уведомлений В Определенные Потоки

регулярные центры уведомлений доставляют уведомления по потоку в которую уведомление было опубликовано. Распределенные центры уведомлений доставляйте уведомления в основной поток. На раз, вы можете потребовать уведомления, которые будут доставлены в определенном потоке, который является определяется вами вместо центра уведомлений. Например, если объект, запущенный в фоновом потоке, прослушивает уведомления из пользовательского интерфейса, такие как закрытие окна, вы хотите получать уведомления в фоновом потоке вместо основного потока. В этих случаях необходимо захватить уведомления по мере их доставки в поток по умолчанию и перенаправления их к соответствующему потоку.

да

Это - вы попадаете в основной поток и публикуете свое уведомление. Не может быть безопаснее, чем.

Да

Swift 2 синтаксис

dispatch_async(dispatch_get_main_queue()) {
    NSNotificationCenter.defaultCenter().postNotificationName("updateSpinner", object: nil, userInfo: ["percent":15])
}

Swift 3 синтаксис

DispatchQueue.main.async {
    NotificationCenter.default.post(name: "updateSpinner", object: nil, userInfo: ["percent":15])
}

где-то вдоль линии это стало возможным с:

addObserver(forName:object:queue:using:)

что это здесь, но это