Actuellement j'utilise NSThread
pour mettre en cache des images dans un autre fil.NSThread vs NSOperationQueue vs. sur l'iPhone
[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];
Y at-il raison de se détourner de NSThread
? GCD est une 4ème option quand il est sorti pour l'iPhone, mais à moins d'un gain de performance significatif, je préfère rester avec des méthodes qui fonctionnent sur la plupart des plateformes.
Basé sur @ conseils de Jon-Eric, je suis allé avec une solution de sous-classe NSOperationQueue
/NSOperation
. Il fonctionne très bien. La classe NSOperation
est assez flexible pour que vous puissiez l'utiliser avec des invocations, des blocs ou des sous-classes personnalisées, selon vos besoins. Peu importe comment vous créez votre NSOperation
, vous pouvez simplement le jeter dans une file d'attente d'opérations lorsque vous êtes prêt à l'exécuter. Les opérations sont conçues pour fonctionner en tant qu'objets que vous mettez dans une file d'attente ou vous pouvez les exécuter en tant que méthodes asynchrones autonomes, si vous le souhaitez. Puisque vous pouvez facilement exécuter vos méthodes d'opération personnalisées de manière synchrone, le test est trivialement facile. J'ai utilisé cette même technique dans une poignée de projets depuis que j'ai posé cette question et je ne pourrais pas être plus heureux de la façon dont il garde mon code et mes tests propres, organisés et heureusement asynchrones.
A ++++++++++ Ne serait-nouveau sous-classe
Vous pouvez profiler chacun d'entre eux. Ce serait un moyen de le savoir. –
Performance était le mauvais mot, je soupçonne qu'ils sont tous les mêmes en dessous. Je suis plus à la recherche de quelqu'un qui a l'expérience avec deux ou plusieurs de ces méthodes pour me donner quelques conseils sur la façon préférée et pourquoi c'est mieux. – kubi