SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Vincent	
  Daubry	
  

                        •  CTO	
  Youboox	
  
                        •  @vdaubry	
  
                        •  iOS	
  et	
  RoR	
  
A quoi ça sert ?
  •  Gérer le multithreading, ne pas bloquer le main thread

  •  Cas d'usage 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 Apple's polite way of saying "don't 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
A quoi ça sert ?

Les frameworks « modernes » utilise des operations pour
faire 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
18/2/13   Copyright © 2012 Youboox.fr | Design by Youboox   4
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, etc




18/2/13                        Copyright © 2012 Youboox.fr | Design by Youboox   5
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
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 ça




18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox   7
NSOperation
•  NSOperation : moyen recommandé de gérer les appels en tache de
   fond

•  Une operation est une sous-classe de NSOperation




18/2/13                Copyright © 2012 Youboox.fr | Design by Youboox   8
NSOperation
•  Une operation a une methode main




18/2/13                Copyright © 2012 Youboox.fr | Design by Youboox   9
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 queue




18/2/13                  Copyright © 2012 Youboox.fr | Design by Youboox   10
Dans la vrai vie : les blocks




C’est	
  tout	
  ;)	
  




18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox   11
Le sucre
•  La queue offre un contrôle très fin sur les operations :

          –  Choisir le nombre d'operations 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épend



18/2/13                          Copyright © 2012 Youboox.fr | Design by Youboox   12
AFNetworking

•  Chaque appel est une operation

•  Une queue pour lancer les operations

•  Chaque operation ouvre une connection assynchrone

•  Operations et blocks = callbacks




18/2/13                  Copyright © 2012 Youboox.fr | Design by Youboox   13
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 batch




18/2/13                        Copyright © 2012 Youboox.fr | Design by Youboox   14
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
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ées




18/2/13                  Copyright © 2012 Youboox.fr | Design by Youboox   16
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 l'appli a accès les
   appels réseau

•  Permet de faire varier le nombre d'appels concurrent en fonction du
   reseau

•  Permet d'affecter un niveau de priorité aux appels



18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox   17
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 online




18/2/13                       Copyright © 2012 Youboox.fr | Design by Youboox   18
MKNetworkKit




18/2/13      Copyright © 2012 Youboox.fr | Design by Youboox   19
MKNetworkKit




18/2/13      Copyright © 2012 Youboox.fr | Design by Youboox   20

Contenu connexe

Tendances

La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockNicolas Lourenço
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! Erwann Robin
 
Tap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéTap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéCocoaHeads France
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec BitriseCocoaHeads France
 
How javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible toolHow javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible toolCocoaHeads France
 
Test flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaTest flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaCocoaHeads France
 
Lab devtalk
Lab devtalkLab devtalk
Lab devtalks_wool
 
Présentation retour d'experience sur l'application MyLittleParis
Présentation retour d'experience sur l'application MyLittleParisPrésentation retour d'experience sur l'application MyLittleParis
Présentation retour d'experience sur l'application MyLittleParisCocoaHeads France
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeadsRNS
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads France
 
L’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & AndroidL’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & AndroidChris Saez
 

Tendances (12)

La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de Bock
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native !
 
Tap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéTap publisher par Frédéric Aloé
Tap publisher par Frédéric Aloé
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
How javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible toolHow javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible tool
 
Test flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaTest flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebia
 
Lab devtalk
Lab devtalkLab devtalk
Lab devtalk
 
Présentation retour d'experience sur l'application MyLittleParis
Présentation retour d'experience sur l'application MyLittleParisPrésentation retour d'experience sur l'application MyLittleParis
Présentation retour d'experience sur l'application MyLittleParis
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
 
L’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & AndroidL’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & Android
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 

Similaire à Ns operationqueue

.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotiqueMicrosoft
 
Mender 2.0 101: Bien démarrer avec les 'update modules'
Mender 2.0 101: Bien démarrer avec les 'update modules'Mender 2.0 101: Bien démarrer avec les 'update modules'
Mender 2.0 101: Bien démarrer avec les 'update modules'Pierre-jean Texier
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Microsoft
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Microsoft
 
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7OSInet
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Luc Juggery
 
A la queue leu leu
A la queue leu leuA la queue leu leu
A la queue leu leunautilebleu
 
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"Smile I.T is open
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfboulonvert
 
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptx
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptxtravaux-pratiques-m103-v1-0-2022-630dd67234da9.pptx
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptxssuser1d2a6b
 
Osis18_Cloud : Virtualisation efficace d’architectures NUMA
Osis18_Cloud : Virtualisation efficace d’architectures NUMAOsis18_Cloud : Virtualisation efficace d’architectures NUMA
Osis18_Cloud : Virtualisation efficace d’architectures NUMAPôle Systematic Paris-Region
 
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle Rome
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle RomeIBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle Rome
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle RomeIBM Switzerland
 
L'optimisation énergétique des datacenter
L'optimisation énergétique des datacenterL'optimisation énergétique des datacenter
L'optimisation énergétique des datacenterekito
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxMarc Bojoly
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linuxembedded-linux-bdx
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Stephan Lagraulet
 
Comment choisir le bon système d'exploitation pour un système embarqué.pdf
Comment choisir le bon système d'exploitation pour un système embarqué.pdfComment choisir le bon système d'exploitation pour un système embarqué.pdf
Comment choisir le bon système d'exploitation pour un système embarqué.pdfAitAddiHajar
 

Similaire à Ns operationqueue (20)

Systeme embarque
Systeme embarqueSysteme embarque
Systeme embarque
 
.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique
 
Mender 2.0 101: Bien démarrer avec les 'update modules'
Mender 2.0 101: Bien démarrer avec les 'update modules'Mender 2.0 101: Bien démarrer avec les 'update modules'
Mender 2.0 101: Bien démarrer avec les 'update modules'
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5
 
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3
 
A la queue leu leu
A la queue leu leuA la queue leu leu
A la queue leu leu
 
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptx
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptxtravaux-pratiques-m103-v1-0-2022-630dd67234da9.pptx
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptx
 
Osis18_Cloud : Virtualisation efficace d’architectures NUMA
Osis18_Cloud : Virtualisation efficace d’architectures NUMAOsis18_Cloud : Virtualisation efficace d’architectures NUMA
Osis18_Cloud : Virtualisation efficace d’architectures NUMA
 
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle Rome
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle RomeIBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle Rome
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle Rome
 
L'optimisation énergétique des datacenter
L'optimisation énergétique des datacenterL'optimisation énergétique des datacenter
L'optimisation énergétique des datacenter
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptx
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016
 
Comment choisir le bon système d'exploitation pour un système embarqué.pdf
Comment choisir le bon système d'exploitation pour un système embarqué.pdfComment choisir le bon système d'exploitation pour un système embarqué.pdf
Comment choisir le bon système d'exploitation pour un système embarqué.pdf
 

Plus de CocoaHeads France

Plus de CocoaHeads France (20)

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer Future
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for Debugging
 
Asynchronous swift
Asynchronous swiftAsynchronous swift
Asynchronous swift
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11
 
My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeads
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 

Ns operationqueue

  • 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 d'usage 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 Apple's polite way of saying "don't 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 pour faire 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, etc 18/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 ça 18/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 NSOperation 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 8
  • 9. NSOperation •  Une operation a une methode main 18/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 queue 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 10
  • 11. Dans la vrai vie : les blocks C’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 d'operations 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épend 18/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 = callbacks 18/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 batch 18/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ées 18/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 l'appli a accès les appels réseau •  Permet de faire varier le nombre d'appels concurrent en fonction du reseau •  Permet d'affecter un niveau de priorité aux appels 18/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 online 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 18
  • 19. MKNetworkKit 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 19
  • 20. MKNetworkKit 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 20