2016-10-08 1 views
0

J'ai démarré une file d'attente d'arrière-plan pour charger l'image en premier, puis mettre à jour l'image UIImageView dans la file d'attente principale.Le chargement de l'image à partir de l'URL n'est pas encore assez rapide en utilisant une file d'attente d'arrière-plan

 int i = 0; 
     for (UIImageView *imageView in self.featuredPhotoImageViewCollection) { 
      dispatch_async(dispatch_queue_create("imageQueue", NULL), ^{ 
       NSURL *url = [NSURL URLWithString:[featuredPhotos[i] valueForKey:@"url"]]; 
       UIImage *image = [UIImage animatedImageWithAnimatedGIFURL:url]; 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        imageView.image = image; 
       }); 
      }); 
      i++; 
     } 

Cependant, il n'est toujours pas assez rapide. Il y a un délai de 0,5 à 1 seconde. Toute autre suggestion autre que l'utilisation d'une file d'attente d'arrière-plan?

Répondre

1

U ne comprennent pas bien l'utilisation de la file d'attente d'arrière-plan. Dans votre code, iOS commencera à exécuter votre code d'arrière-plan tout en laissant la file d'attente principale ne rien faire jusqu'à ce qu'il soit terminé le code d'arrière-plan, puis mettre à jour votre image dans la file d'attente principale. Par conséquent, peu importe la file d'attente utilisée en arrière-plan, cela n'accélère pas votre vitesse.

L'utilisation normale de celui-ci est 1) montrant l'indicateur de chargement, 2) file d'attente d'arrière-plan {faire quelque chose 3) file d'attente principale {Cacher indicateur de chargement & mise à jour UI}}

Dans votre cas, ma suggestion est pour montrer l'instantané de vos images GIF comme l'indicateur mentionné ci-dessus. Ou vous pouvez simplement montrer l'indicateur.

Ou préchargez toutes les images GIF ailleurs et affichez-les ici. Le chargement de plusieurs images prend toujours du temps.

0

Vous pouvez utiliser une bibliothèque de troisième partie telle que SDWebImage pour utiliser la mise en cache, afin de réduire votre problème au premier téléchargement uniquement. Il a également des options de priorité que vous pouvez trouver utile.

Ou vous pouvez télécharger l'image avant d'arriver à l'affichage où il est affiché.

0

Si le fichier gif est un fichier volumineux et un téléchargement multithread pris en charge par le serveur. Vous pouvez ensuite essayer un dispatch_group pour télécharger le fichier gif.