Notre application Objective-C nécessite la détection des changements d'accessibilité réseau. CocoaPods offre actuellement beaucoup trop d'alternatives, donc nous ne savons pas comment en choisir un.`SCNetworkReachabilityScheduleWithRunLoop` ou` SCNetworkReachabilitySetDispatchQueue`? Et la condition de course
Toutes les gousses de joignabilité utilise soit SCNetworkReachabilityScheduleWithRunLoop
ou SCNetworkReachabilitySetDispatchQueue
: sont-il des différences de comportement à attendre de l'un ou l'autre? (À part le soutien trivial d'iOS 2 et iOS 3 pour le premier)
Last comment from Oleg on Mike Ash blog reads:
Ce qui me dérange est la condition de course potentielle qui peut se produire quand je l'appelle SCNetworkReachabilityGetFlags dans un fil d'aide, tandis que le SCNetworkReachabilityScheduleWithRunLoop a déjà été défini dans la boucle d'exécution principale.
Il y aura deux threads différents qui vérifient à la fois l'accessibilité du réseau et le retour du résultat au thread principal. Si l'état du réseau change entre les deux, les événements peuvent apparaître dans la file d'attente de la boucle d'exécution dans un ordre incorrect.
Existe-t-il un moyen de garantir l'ordre d'événement correct? Idéalement, pour faire le SCNetworkReachabilityScheduleWithRunLoop pour déclencher des événements sur demande (non seulement sur le changement d'état réel du réseau)
Comme nous aimerions savoir quels gousses sont les plus fiables, est SCNetworkReachabilitySetDispatchQueue
adresser une solution à la course de Oleg problème de condition? Ou y at-il un modèle pour résoudre les problèmes de condition de course que nous devrions rechercher lors du choix d'un pod?
Pour énumérer quelques exemples, voici ce que nous avons remarqué ...
Ils utilisent SCNetworkReachabilityScheduleWithRunLoop
:
- https://github.com/AFNetworking/AFNetworking janvier 2016
- https://github.com/skywite/SWReachability juin 2015
- https://github.com/kstenerud/KSReachability mai 2015
- https://github.com/nicklockwood/FXReachability mars 2015
- https://github.com/jaredsinclair/JTSReachability août 2014
- https://github.com/Abizern/NPReachability 20 mai 14
- https://github.com/dev5tec/FBNetworkReachability mars 2014
- https://developer.apple.com/library/content/samplecode/Reachability/ déc 2015
Ils utilisent SCNetworkReachabilitySetDispatchQueue
:
- https://github.com/belkevich/reachability-ios janvier 2016
- https://github.com/dustturtle/RealReachability janvier 2016
- https://github.com/sger/SGReachability octobre 2015
- https://github.com/GlennChiu/GCNetworkReachability juin 2014
- tonymillion's reachability, mais il affirme qu'il obtient rejeté par Apple