Pourquoi est-il pas de classe NSHTTPURLProtocol?
-
22-09-2019 - |
Question
Eh bien, NSURLProtocol
est juste assez générique? Il est pour définir tous les types de protocoles, non?
Alors, pourquoi est-il rien comme NSHTTPURLProtocol
? Au lieu de cela, il y a une catégorie informelle sur NSURLRequest avec des trucs HTTP spécifique. Pourquoi ont-ils fait de cette façon? Pourquoi aucun protocole HTTP personnalisé à la place?
Quelle est l'idée derrière mettre tout ce genre de choses en NSURLRequest
plutôt que dans un protocole personnalisé pour HTTP?
HTTP Bien sûr est souvent utilisé, mais de toute façon: il est source de confusion pour comprendre l'ensemble du système de chargement d'URL de Cocoa/CocoaTouch
. Maintenant, il y a deux documents. On dit, « créer une sous-classe de NSURLProtocol
personnalisé pour votre propre protocole ». L'autre dit: « créer des catégories informelles comme celles pour les choses HTTP sur NSURLRequest
».
quelqu'un Hope avec une compréhension profonde peut éclaircir cela;)
La solution
sont plusieurs bonnes raisons:
-
Vous n'avez accès à la sous-classe
NSURLProtocol
qui alimente la connexion; seul leNSURLConnection
lui-même objet. Par conséquent, même si ces méthodes ont été ajoutées à une classeNSHTTPURLProtocol
hypothétique, comment voulez-vous y accéder jamais? -
NSURLConnection
utilise l'objet de requête afin de déterminer quel protocole va gérer. Par conséquent, toutes les propriétés de la demande doivent être connus avant que l'objet du protocole est créé. Par exemple, vous pouvez créer un protocole personnalisé qui remplace l'implémentation HTTP par défaut, mais seulement pour certains hôtes. -
Fournir tous les réglages initiaux est beaucoup plus propre. Que faire si vous pouvez accéder à l'objet de protocole et définir des propriétés sur ce milieu de charge? Comment faut-il les gérer - ignorer, exception ou essayez de régler