Ns operationqueue

3 156 vues

Publié le

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
3 156
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2 770
Actions
Partages
0
Téléchargements
7
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Ns operationqueue

  1. 1. Vincent  Daubry   •  CTO  Youboox   •  @vdaubry   •  iOS  et  RoR  
  2. 2. A quoi ça sert ? •  Gérer le multithreading, ne pas bloquer le main thread •  Cas dusage numéro 1 : appels réseaux •  Article de Jeff Lamarche de 2010 qui déconseille l’utilisation de thread pour lancer des appels réseaux synchrone •  « This is Apples polite way of saying "dont use threads for networking, you idiot". »*  h;p://iphonedevelopment.blogspot.fr/2010/05/downloading-­‐images-­‐for-­‐table-­‐without.html   18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 2
  3. 3. A quoi ça sert ?Les frameworks « modernes » utilise des operations pourfaire les appels réseaux.On utilise donc des appels assynchrone pour lancer… des[NSURLConnection sendAsynchronousRequest] ?18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 3
  4. 4. 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 4
  5. 5. A quoi ça sert ?•  Il y a 2 raisons : La performance : « Event-driven code is more complex than code using blocking threads, but it delivers the highest network performance. » Mais surtout : –  Une queue permet un contrôle très fin sur les appels : priorité, dépendances, appels concurrents, etc18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 5
  6. 6. Un peu de théorie•  Lancer des thread à la main est facile•  Mais : –  Ce n’est pas scalable (gestion du CPU et de la mémoire) –  Pas adapté aux CPU multicoeurs•  A réserver à des cas très particulier d’appli temps réels…•  En conlusion : Please don’t do it.18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 6
  7. 7. Un peu de théorie•  La bonne façon de faire est d’utiliser les queue fournit par le SDK : dispatch queue et operation queue•  Dispatch queue (GCD) : approche bas niveau•  Operation queue : approche haut niveau•  Les operations sont des simple objets•  On peut faire pleins de choses sympathiques avec ça18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 7
  8. 8. NSOperation•  NSOperation : moyen recommandé de gérer les appels en tache de fond•  Une operation est une sous-classe de NSOperation18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 8
  9. 9. NSOperation•  Une operation a une methode main18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 9
  10. 10. NSOperationQueue•  Une job queue : NSOperationQueue•  Un simple array d’operation•  Par défaut les operations sont exécutées dans l’ordre dès qu’on les ajoute à la queue18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 10
  11. 11. Dans la vrai vie : les blocksC’est  tout  ;)  18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 11
  12. 12. Le sucre•  La queue offre un contrôle très fin sur les operations : –  Choisir le nombre doperations simultanées –  Priorité d’exécution des jobs –  Mettre en pause le démarrage de nouvelles operations•  Une operation est KVO compliant : –  Etat du job (isCanceled , isConcurrent, isFinished) –  Completion block•  Une operation peut avoir une liste d’operations dont elle dépend18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 12
  13. 13. AFNetworking•  Chaque appel est une operation•  Une queue pour lancer les operations•  Chaque operation ouvre une connection assynchrone•  Operations et blocks = callbacks18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 13
  14. 14. AFNetworking•  Exemple : enqueueBatchOfHTTPRequestOperationsWithRequests•  Pour chaque requête il y a un completion block (suivre l’avancement)•  Chaque requête est ajouté comme une dépendance du batch18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 14
  15. 15. Attention au MainThread…•  Penser à lancer vos opérations de mise à jour de l’interface sur le main thread !18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 15
  16. 16. Attention à la mémoire…•  Chaque opération retient les objets qui sont alloués durant son exécution•  Quand on définit des dépendances entre opérations la mémoire n’est libéré que lorsque toutes les opérations soient terminées18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 16
  17. 17. MKNetworkKit•  Et si votre appli fait des appels long en tache de fond ? (ex: téléchargement)•  3G = 2 connexions concurrentes max … (edge 1 connection)•  La queue est placée dans un singleton, toute lappli a accès les appels réseau•  Permet de faire varier le nombre dappels concurrent en fonction du reseau•  Permet daffecter un niveau de priorité aux appels18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 17
  18. 18. MKNetworkKit•  La queue est en mémoire•  On ne peut pas sérialiser un block (?)•  Mais on peut serialiser une opération!•  Pourquoi faire ? –  Exemple : Quand on perd le réseau les operations sont sauvés et executés quand on revient online18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 18
  19. 19. MKNetworkKit18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 19
  20. 20. MKNetworkKit18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 20

×