J'essaie de créer une NSOperationQueue et d'y ajouter une NSOperation. Plus tard, je ne veux pas vérifier si la file d'attente est en cours d'exécution et peut-être annuler. Tout cela est censé être appelé à partir de différentes fonctions. Quelle est la meilleure approche pour le faire? Je serais heureux pour un exemple de code. Merci!Global NSOperationQueue
Répondre
Je créer une file d'attente d'opérations gérée par un singleton.
Commencez par créer votre classe singleton. Il donnera accès au NSOperationQueue
. Appelons le singleton MyGlobalQueueManager
.
Il aura un ivar
appelé myGlobalQueue
:
@property (nonatomic) NSOperationQueue* myGlobalQueue;
Dans le fichier .m
de MyGlobalQueueManager
, créez une méthode init
assez standard qui sera mis en place la file d'attente d'opération:
- (id)init
{
self = [super init];
if (self)
{
myGlobalOperationQueue = [[NSOperationQueue alloc] init];
}
return self;
}
Maintenant, la méthode qui se fournit comme un singleton. Encore une fois, cela est plutôt standard:
+ (MyGlobalQueueManager *)sharedInstance
{
static MyGlobalQueueManager *sharedInstance = nil;
static dispatch_once_t isDispatched;
dispatch_once(&isDispatched,^
{
sharedInstance = [[MyGlobalQueueManager alloc] init];
});
return sharedInstance;
}
Let accès que la file d'attente d'où vous voulez l'utiliser:
MyGlobalQueueManager* myGlobalQueueManager = [MyGlobalQueueManager sharedInstance];
NSOperationQueue *myGlobalQueue = myGlobalQueueManager.myGlobalOperationQueue;
Vous pouvez ensuite ajouter des opérations à cette file d'attente que vous aimez.
Comment savoir si des choses sont en file d'attente?
NSUInteger count = [myGlobalQueue operationCount];
Comment abandonner? Annuler tout comme suit:
[myGlobalQueue cancelAllOperations];
L'annulation dépend bien sûr des opérations. Si vous écrivez des classes personnalisées NSOperation
, vous devrez gérer cela vous-même. Je trouve NSOperation
et NSOperationQueue
assez facile à utiliser et assez simple.
Un excellent document à lire pour tout cela est le Guide de programmation d'accès simultané. Plus précisément, jetez un oeil à Operation Queues
Hey @Max MacLeod si j'ai deux uicontrollers et en premier dans la fonction d'appel de viewWillDisappear cancelAllOperations sur la file d'attente de Singleton cela va-t-il faire effet sur NSOpearation que je commence dans la viewdidload de 2nd viewcontroller où le premier pousse le 2nd par le contrôleur de navigation? –
Dans ce cas, je voudrais avoir une file d'attente dans chaque contrôleur de vue. Sinon, cela devient plus compliqué. Jetez un oeil à l'exemple de projet MVCNetworking fourni par Apple. Il montre un gestionnaire de réseau singleton qui gère trois ou quatre files d'attente différentes. –
Une manière plus simple de le faire est de rendre une fonction "globalement visible". Alias, déclare dans un en-tête public:
extern NSOperationQueue * SharedQueue();
et définir au sein de votre compilation "unité" - mais en dehors @implementation
tout.
NSOperationQueue *SharedOperationQueue()
{
static NSOperationQueue * _SharedQueue = nil;
return _SharedQueue ?: ^{ _SharedQueue = NSOperationQueue.new;
_SharedQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount;
return _SharedQueue;
}();
}
Comme un petit bonus .. #define
avec un "alias" .. et vous pouvez abuser vraiment!
#define MY_SOQ SharedOperationQueue()
[MY_SOQ addOperationWithBlock:^{ /* GO CRAZY */ }];
- 1. NSOperationQueue, NSOperation
- 2. Swift - NSOperationQueue
- 3. Réorganiser NSOperationQueue
- 4. NSOperationQueue décalage sur IOS4
- 5. NSOperationQueue priorité d'opération
- 6. Implémentation de NSOperationQueue
- 7. travail unique avec NSOperationQueue
- 8. Débogage du blocage NSOperationQueue
- 9. NSOperationQueue et UITableView
- 10. Données de base + NSOperationQueue
- 11. Annuler NSOperation De NSOperationQueue
- 12. NSOperation existe sur NSOperationQueue
- 13. NSOperationQueue et NSFetchedResultsController
- 14. NSOperationQueue blocage actualisation tableview
- 15. NSOperationQueue waitUntilAllOperationsAreFinished contre performSelectorOnMainThread
- 16. NSOperationQueue exception hors plage
- 17. NSOperation Deadlocks and blocks NSOperationQueue
- 18. Equivalent de NSOperationQueue dans .NET
- 19. Cancelling NSOperationQueue à l'intérieur NSOperation
- 20. NSOperationQueue Appel performSelectorOnMainThread bloque l'application
- 21. C/C++ global vs global
- 22. Puis-je libérer automatiquement une NSOperationQueue?
- 23. NSThread vs NSOperationQueue vs. sur l'iPhone
- 24. NSOperationQueue ne fonctionne pas dans IOS5
- 25. exc_bad_acccess lors de l'ajout à NSOperationQueue
- 26. NSOperationQueue n'exécute pas toutes les opérations
- 27. Comment optimiser callbacks d'un fil NSOperationQueue-commencé
- 28. Sécurité des threads: NSOperationQueue + [array addObject]
- 29. Problème de compréhension NSOperation & NSOperationQueue (swift)
- 30. Combien de temps NSOperationQueue restera en mémoire?
Il ne répond pas vraiment à votre question mais Grand Central Dispatch offre des files d'attente globales prêtes à l'emploi. – gcamp
Cela pourrait être la réponse que je cherchais. Merci beaucoup! – Linus
J'ai réussi à créer et à ajouter une file d'attente mais je n'arrive pas à comprendre comment annuler une tâche dans la file d'attente. – Linus