2010-02-15 3 views
1

Je suis allé à l'iPhone Developer Tech Talk il ya quelques mois et a demandé à l'un des gourous là-bas sur le manque de NSHost sur l'iPhone. Du code que je portais sur l'iPhone a fait un usage important de NSHost tout au long de son code réseau.Résolution DNS CFHost - Quand est-il possible d'utiliser l'API synchrone?

On m'a dit que NSHost est sur l'iPhone, mais son privé. On m'a également dit que NSHost est une API synchrone et que je ne devrais pas l'utiliser quand même. (Si quelqu'un pouvait expliquer pourquoi il ne devrait pas être utilisé, en prime, ce serait génial.)

Je peux voir les mises en garde de l'utilisation des API synchrones sur le thread principal dans le fait qu'elles vont bloquer jusqu'à complète - et ce n'est jamais une bonne chose avec le code réseau car il y a tellement de facteurs qui pourraient amener l'API à bloquer le thread pendant un temps considérable.

Ma solution consistait à écrire un wrapper autour des fonctions de résolution asynchrones de CFHost.

Le résultat fonctionne plutôt bien, et j'envisage de le publier dans le domaine public.

Mais ma question est la suivante: Dites que mon application résout seulement un nom d'hôte une fois par course, pendant la phase de connexion, puis le cache pour le reste de la session. Pendant le temps de résolution, un écran modal s'affiche pour indiquer à l'utilisateur "Connexion" avec une bonne roulette.

Est-il vraiment important que la résolution soit asynchrone ou non? L'utilisateur doit attendre pour se connecter quand même, et la résolution est seulement faite sur la première connexion. Les connexions suivantes utilisent le résultat mis en cache de la résolution.

Quand est-il possible d'être synchrone et quand les choses devraient-elles être asynchrones?

Répondre

2

Votre spinner ne tournera pas, car l'interface utilisateur sera également bloquée pendant l'appel synchrone. Bien sûr, vous pouvez faire l'appel sur un thread séparé, mais vous faites essentiellement la même chose que l'appel asynchrone.

+0

Je ne suis pas sûr de ce que c'est exactement sur UIActivityIndicator, mais il semble continuer à animer (tourner) même si le fil principal est bloqué, c'est très bizarre. Je ne peux qu'imaginer que UIActivityIndicatorClass fait de l'animation sur un autre thread? Étrange. – Jasarien