Actuellement, je suis en utilisant NSThread
cache des images dans un autre thread.
[NSThread detachNewThreadSelector:@selector(cacheImage:) toTarget:self withObject:image];
Alternativement:
[self performSelectorInBackground:@selector(cacheImage:) withObject:image];
Sinon, je peux utiliser un NSOperationQueue
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(cacheImage:) object:image];
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation:invOperation];
Est-il une raison pour passer à partir de NSThread
? PGCD est une 4ème option quand il sortira pour l'iPhone, mais si il y a un gain de performance significatif, je préfère rester avec les méthodes de travail dans la plupart des plates-formes.
Basé sur @Jon-Eric conseils, je suis allé avec un NSOperationQueue
/NSOperation
sous-classe de la solution. Il fonctionne très bien. L' NSOperation
classe est suffisamment flexible que vous pouvez l'utiliser avec des invocations, des blocs personnalisés ou sous-classes, en fonction de vos besoins. Peu importe la façon dont vous créez votre NSOperation
vous pouvez simplement le jeter dans une opération de la file d'attente lorsque vous êtes prêt à l'exécuter. Les activités sont conçues pour fonctionner soit comme des objets que vous mettez dans une file d'attente ou vous pouvez les exécuter de manière autonome des méthodes asynchrones, si vous le souhaitez. Puisque vous pouvez facilement exécuter votre personnalisé méthodes d'opération de façon synchrone, le test est trivial.
J'ai utilisé cette même technique dans une poignée de projets depuis que j'ai posé cette question et je ne pouvais pas être plus heureux avec la façon dont elle garde mon code et mes tests, propre, organisé et heureusement asynchrone.
Un++++++++++ Serait sous-classe de nouveau