Je me demandais comment quelqu'un chargerait plusieurs éléments d'interface utilisateur de manière asynchrone. Dans mon cas, j'ai un UIViewController
qui a un UISegmentControl
. Chaque segment a différents aspects de l'interface utilisateur à charger.
Par exemple seg1
montre une image, et l'image seg2
montre et texte, etc.Chargement de plusieurs vues asynchrones dans swift
Si je charge tous les éléments de l'interface utilisateur avant d'afficher le UIViewController
alors il y a un décalage notable. Donc, je voudrais charger seg2...n
de manière asynchrone pour rendre l'interface utilisateur plus sensible.
Est-ce que je dois charger tout via
DispatchQueue.main.async {
// load UI
}
Pour chaque seg
je veux charger en arrière-plan? Ou puis-je charger ces éléments sur un autre thread et ne pas prendre le fil principal? Je sais que vous n'êtes pas censé mettre à jour l'interface utilisateur sur les threads d'arrière-plan ... Mais l'utilisation du thread principal bloquera-t-elle toujours l'interface utilisateur si j'utilise du code asynchrone?
L'appel simple de "DispatchQueue.main.asyn" prend simplement cette fermeture et la place à la fin de la file d'attente ... si vous avez une opération de longue durée/durée indéterminée, vous bloquerez toujours l'interface graphique. Vous aurez simplement attendu quelques millisecondes supplémentaires pour le faire. N'est-il pas possible de prendre les différentes ressources qui sont la vraie cause du temps supplémentaire, et de les gérer sur un thread d'arrière-plan? Essayez de définir la qualité de service (qualité de service à haute valeur pour aider). – BonanzaDriver
Oh je vois. Utilisez le profileur pour voir ce qui prend du temps et le faire en arrière-plan? – uti0mnia