Publication de NSNotification sur le thread principal

J'ai trouvé l'extrait de code suivant qui permet à NSNotification d'être publié sur le thread principal à partir de n'importe quel thread d'arrière-plan. Je voudrais savoir si c'est une pratique sûre et acceptable s'il vous plaît?

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

Oui vous pouvez .

Généralement, vous souhaitez que les NSNotifications soient envoyées sur le server principal, en particulier si elles triggersnt des activités d'interface user telles que le rejet d'une boîte de dialog de connection modale.

Envoyer des notifications à des threads particuliers

Les centres de notification réguliers fournissent des notifications sur le fil dans lequel la notification a été postée. Les centres de notification dissortingbués fournissent des notifications sur le thread principal. À certains moments, vous pouvez exiger que des notifications soient envoyées sur un thread particulier déterminé par vous au lieu du centre de notification. Par exemple, si un object exécuté dans un thread d'arrière-plan est à l'écoute des notifications de l'interface user, telles qu'une fermeture de window, vous souhaitez recevoir les notifications dans le thread d'arrière-plan au lieu du thread principal. Dans ces cas, vous devez capturer les notifications telles qu'elles sont livrées sur le thread par défaut et les redirect vers le thread approprié.

Oui

C'est – vous entrez dans le fil principal et postr votre notification. Je ne peux pas être plus sûr que ça.

OUI

La syntaxe de Swift 2

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

Swift 3 syntaxe

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

Quelque part le long de la ligne, cela est devenu possible avec:

 addObserver(forName:object:queue:using:) 

qui est ici , mais le point entier est l'object de queue .

La queue d'opération à laquelle le bloc doit être ajouté. Si vous passez nil , le bloc est exécuté de façon synchrone sur le thread de publication.

Alors, comment obtenez-vous la queue qui correspond à la piste principale?

let mainQueue = OperationQueue.main

Note: ceci est quand vous vous abonnez aux notifications, ainsi vous le faites une fois et vous avez fini. Le faire à chaque appel est terriblement redondant.