[Ios] Est-ce que créer un thread UIImage est sûr?



Answers

Oui. Il est assez courant de charger des images en arrière-plan, principalement s'il s'agit d'un fichier distant, ou si de nombreuses images sont en cours de chargement. Et oui, seulement mettre à jour l'interface utilisateur sur le thread principal.

MODIFIER:

En raison de quelques commentaires éclairants, je voudrais réviser ma première réponse de 'Oui' à 'Basé sur l'expérience et mon évaluation de ce qui ne serait pas une alternative viable pour UIImage thread sécurité quand il s'agit de charger une image, je pense qu'il est raisonnable de supposons que c'est. Cependant, chaque personne est justifiée par sa propre opinion, et peut-être que le risque associé à l'échec du code est trop élevé pour faire des suppositions en toutes circonstances.

Question

Est-ce que l'appel de quelque chose comme ça est considéré comme sûr? C'est seulement en créant un UIImage, pas de mise à jour de l'interface utilisateur. Je ne trouve aucune documentation à ce sujet.

UIImage * hiResImage = [[UIImage alloc] initWithContentsOfFile:path]; 

FYI, je fais plus tard la mise à jour de l'interface utilisateur sur le fil principal comme ça ...

[imageViewForZoom performSelectorOnMainThread:@selector(setImage:) withObject:hiResImage waitUntilDone:NO];

Ce que je sais déjà:

  • Depuis iOS4, de nombreuses méthodes de dessin d'UIKit sont devenues sécurisées. Lisez d' ici .
  • Je ne devrais pas mettre à jour ui sur le thread d'arrière-plan (par exemple, non [myImageView setImage:image]; )

EDIT: Regardons un autre point de vue. Est-ce que 'non-thread-safe' signifie qu'il y a une chance qu'il puisse être bloqué pour toujours? ou signifie simplement qu'il n'y a aucune garantie sur le temps d'exécution de début / durée. Si c'est le dernier cas, il n'y a pas de problème si nous avons une certaine 'quantité indéterminée' de retard lors du chargement d'une image. La mise à jour de l'interface utilisateur est effectuée sur le thread principal. Donc, il est toujours considéré comme OK, pour créer UIImage au moins, de ne pas être thread-safe.

Je sais que ce n'est pas vraiment lié à la question mais je veux juste le signaler car je crains qu'il n'y aura pas de réponse claire à ma question initiale :)




Links