web-dev-qa-db-fra.com

Quelle est la plus grande différence entre NSURLConnection et NSURLSession

NSURLSession est un nouveau SDK réseau que NSURLConnection d'Apple. Le troisième ancien choix est CFNetwork.

La question ici est de comprendre la plus grande différence entre eux pour comprendre pourquoi Apple évolue comme ceux-ci.

Merci

23
Forrest

Le modèle entier est différent. NSURLSession est conçu autour de l'hypothèse que vous aurez beaucoup de demandes qui nécessitent une configuration similaire (ensembles d'en-têtes standard, etc.), et rend la vie beaucoup plus facile si vous le faites.

NSURLSession prend également en charge les téléchargements en arrière-plan, qui permettent de continuer à télécharger des ressources pendant que votre application n'est pas en cours d'exécution (ou lorsqu'elle est en arrière-plan sur iOS). Pour certains cas d'utilisation, il s'agit également d'une victoire majeure.

NSURLSession fournit également le regroupement des demandes connexes, ce qui facilite l'annulation de toutes les demandes associées à une unité de travail particulière, comme l'annulation de toutes les charges associées au chargement d'une page Web lorsque l'utilisateur ferme la fenêtre ou l'onglet.

NSURLSession fournit également de meilleures interfaces pour demander des données à l'aide de blocs, en ce sens qu'il vous permet de les combiner avec des méthodes déléguées pour effectuer une gestion d'authentification personnalisée, une gestion de redirection, etc., tandis qu'avec NSURLConnection, si vous vous êtes soudain rendu compte que vous deviez faire ces choses, vous a dû refactoriser votre code pour ne pas utiliser les rappels basés sur des blocs.

38
dgatwood

NSURLConnection

Un groupe de composants interdépendants qui forment le système de chargement d'URL Foundation: NSURLRequest, NSURLResponse, NSURLProtocol, NSURLCache, NSHTTPCookieStorage, NSURLCredentialStorage et son homonyme, NSURLConnection

Les objets NSURLRequest sont passés à un objet NSURLConnection. Le délégué (conforme aux protocoles et protocoles informels d'autrefois) répond de manière asynchrone en tant que NSURLResponse, et toute NSData associée est envoyée à partir du serveur.

Avant d'envoyer une demande au serveur, le cache partagé est consulté et, selon la stratégie et la disponibilité, une réponse mise en cache peut être retournée immédiatement et de manière transparente. Si aucune réponse en cache n'est disponible, la demande est effectuée avec l'option de mettre en cache sa réponse pour toute demande ultérieure. Dans le processus de négociation d'une demande à un serveur, ce serveur peut émettre un défi d'authentification, qui est soit géré automatiquement par le cookie partagé ou le stockage des informations d'identification, ou par le délégué de connexion. Les demandes sortantes peuvent également être interceptées par un objet NSURLProtocol enregistré pour modifier le comportement de chargement de manière transparente si nécessaire.

NSURLSession

fait référence à un groupe de classes interdépendantes, en plus de la classe éponyme NSURLSession. NSURLSession est composé des mêmes éléments que précédemment, avec NSURLRequest, NSURLCache et similaires, mais remplace NSURLConnection par NSURLSession, NSURLSessionConfiguration et trois sous-classes de NSURLSessionTask: NSURLSessionDataTask, NSURLSessionUploadTask et NSURLSessionD.

NSURLSessionTask est une sous-classe abstraite, avec trois sous-classes concrètes qui sont utilisées directement: NSURLSessionDataTask, NSURLSessionUploadTask et NSURLSessionDownloadTask. Ces trois classes résument les trois tâches de mise en réseau essentielles des applications modernes: la récupération de données, telles que JSON ou XML, et le téléchargement et le téléchargement de fichiers. Pour plus

13
Avijit Nagare

Différence entre NSURLSession et NSURLConnection

NSURLSession

[~ # ~] note [~ # ~] : (NSURLConneciton est obsolète sous OS X 10.11 et iOS 9.0)

1) NSURLSession est conçu autour de l'hypothèse que vous aurez beaucoup de demandes qui nécessitent une configuration similaire (ensembles d'en-têtes standard, etc.), et rend la vie beaucoup plus facile.

2) NSURLSession prend également en charge les téléchargements en arrière-plan, qui permettent de continuer à télécharger des ressources pendant que votre application n'est pas en cours d'exécution ou lorsqu'elle est en arrière-plan sur iOS.

3) NSURLSession fournit également le regroupement des demandes connexes, Making est facile d'annuler toutes les demandes associées à une unité de travail particulière, comme l'annulation de toutes les demandes associées à une unité de travail particulière, telles que l'annulation de toutes les charges associées au chargement d'une page Web lorsque l'utilisateur ferme la fenêtre ou l'onglet

4) NSURLSession fournit également des interfaces plus agréables pour demander des données à l'aide de blocs, n qu'il vous permet de les combiner avec des méthodes déléguées pour effectuer une gestion d'authentification personnalisée, gérer la redirection , etc.

Types NSURLSessionConfiguration

1) defaultSessionConfiguration

Creates a default configuration object that uses the disk-persisted global cache, credential and cookie storage objects.

2) ephemeralSessionConfiguration

Similar to the default configuration, except that all session-related data is stored in memory. Think of this as a “private” session.

3) backgroundSessionConfiguration

Lets the session perform upload or download tasks in the background. Transfers continue even when the app itself is suspended or terminated

Types de NSURLSessionTasks

1) Tâches de données (NSURLSessionDataTask)

Les tâches de données sont utilisées pour demander des données à un serveur, telles que des données JSON. Ces données sont généralement stockées en mémoire et ne touchent jamais le système de fichiers. Nous pouvons utiliser NSURLSessionDataTask.

2) Tâches de téléchargement (NSURLSessionUploadTask)

Les tâches de téléchargement sont utilisées pour télécharger des données vers une destination distante. Nous pouvons utiliser NSURLSessionUploadTask.

3) Tâches de téléchargement (NSURLSessionDownloadTask)

Téléchargement d'un fichier et stockage dans un emplacement temporaire. Nous pouvons utiliser NSURLSessionDownloadTask.

Différence principale entre NSURLSession et NSURLConnection

NSURLConnection:

si nous avons une connexion ouverte avec NSURLConnection et que le système interrompt notre application, lorsque notre application passe en mode arrière-plan, tout ce que nous avons reçu ou envoyé a été perdu.

NSURLSession

résoudre ce problème et nous donner également des téléchargements de processus. Il gère le processus de connexion même lorsque nous n'y avons pas accès. Vous devrez utiliser

  application:handleEventsForBackgroundURLSession:completionHandler in your AppDelegate

Pour plus d'informations, veuillez consulter différence entre NSURLSession et NSURLConnection

8
Jaywant Khedkar