Purger une queue

Hello,

Je cherche une méthode pour purger une queue.

Quand je charge une vue collection view, mes images sont chargé dans des items. Si je change les données de ma collection view des images qui étaient en cours de traitement dans la queue finissent par apparaître dans ma nouvelle collection.

J'ai bien pensé à une sorte d'identifiant pour éviter ça mais le traitement va finir son travail au lieu de s'occuper de la nouvelle vue.

Une piste pour éviter ça ?

Réponses

  • LexxisLexxis Membre
    mai 2019 modifié #2

    Purger une queue ou interrompre le traitement en cours (tu ne peux pas purger une queue qui a des traitements en cours d'exécution).
    Le plus simple et d'ajouter un test dans ton traitement pour indiquer s'il doit continuer ou être interrompu. Regardes du coté de la classe NSOperationQueue (dont tu pourrais tirer avantage).

  • Ca vient de moi ou c'est moins efficace que d'utiliser `dispatch_queue_t`` ?

    On a clairement un bien meilleur contrôle mais en moins rapide. J'ai fait ça:
    https://github.com/Old-Geek/Librairie/blob/master/Librairie/Image/NSImage+Cache.m#L26

    mal fait ?

  • LexxisLexxis Membre

    Non, l'utilisation de NSOperationQueue dans cet exemple n'est pas judicieuse. Si tu as un traitement long, répétitif et qui puisse être interrompu pour une raison, dans ce cas tu peux utiliser une NSOperationQueue et ajouter un block d'exécution qui peut être interrompu en positionnant IsCanceled (de mémoire) - a condition, évidemment, que ton block d'exécution scrute la variables indiquant l'arrêt du block.

    Lorsque je dois assigner une image dont la source n'est pas immédiatement disponible dans un XXimageView dont je sais qu'elle peut être recycler j'utilise une identifiant unique (laid du Comics sur la cellule par exemple) et au moment de l'obtention de l'image je vérifie si l'identifiant est identique.

  • NSOperationQueue a ses avantages mais je préfère gérer à la main.

    Pour les images, si t'as déjà 5 process en cours, que tu annules ou non ça sera pas stopé donc je reviens sur l'idée de l'identifiant.

    Ca m'a aussi causé un souci, quand j'ajoute un fichier dans un zip et que je fais un cancelAll ça me colle un fichier de 0octet dedans mais je dois quand même attendre la fin de la compression...

    un if (cancel) est plus pratique et évite les accidents.

    En tout cas c'est pas perdu, j'ai vu de quoi c'était capable et ça a tout de même ses avantages pour des choses plu pointu comme ajouter des opérations avec de la QoS

Connectez-vous ou Inscrivez-vous pour répondre.