Ns operationqueue
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,032
On Slideshare
571
From Embeds
2,461
Number of Embeds
4

Actions

Shares
Downloads
5
Comments
0
Likes
1

Embeds 2,461

http://cocoaheads.fr 2,440
http://feeds.feedburner.com 17
http://abtasty.com 2
http://translate.googleusercontent.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Vincent  Daubry   •  CTO  Youboox   •  @vdaubry   •  iOS  et  RoR  
  • 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. 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. 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 4
  • 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. 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. 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. 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. NSOperation•  Une operation a une methode main18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 9
  • 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. Dans la vrai vie : les blocksC’est  tout  ;)  18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 11
  • 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. 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. 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. 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. 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. 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. 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. MKNetworkKit18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 19
  • 20. MKNetworkKit18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 20