NSURLProtocol的学习总结

NSURLProtocol的学习总结

一、基础篇

1.是什么

  • NSURLProtocol是iOS中URL处理系统中鲜为人知的核心
  • 首先在深入研究之前,需要对网络概念有一个基本的了解,并熟悉NSURLConnection的工作原理。 如果您目前不熟悉NSURLConnection,那么我建议您阅读Apple的本教程和/或NSURLConnection。
  • 有一组类被称为URL Loading System,需要了解它们以了解iOS如何处理应用程序基于URL的资源的加载请求。
  • URL Loading System 的核心类是 NSURL,对于一个网络请求,NSURL 类告诉我们,我们的APP请求的host是什么,请求的资源在host中的path是什么;另外,NSURLRequest对象增加HTTP Header、请求的body等信息;URL Loading System 提供了几个不同的类来处理request,最常见的是 NSURLConnection 和 NSURLSession;
  • 接收到响应时,响应会分为两部分,metaData 和 Data;其中metaData 会被封装进 NSURLResponse 对象中,它会告诉我们MIME 类型(什么是MIME type)、文本编码格式、the expected amount of data of your response 以及作为数据来源的URL;Data 以 NSData对象的方式返回。
  • 在后台,当URL Loading System 通过 NSURLRequest 加载数据时,它将会创建一个 NSURLProtocol 的子类的实例对象。NSURLProtocol是一个抽象类,我们不能直接实例化它

请记住,Objective-C实际上并没有抽象类作为一等公民。 只有通过定义和文档,类才被标记为抽象。

  • 鉴于 NSURLProtocol的命名,很容易被误解为是一个协议,但其实它是一个类。但它的使用方式跟协议很像,因为它定义了一系列继承自NSURLProtocol必须实现的方法。对苹果来说,协议可能不够灵活,所以他们选择了抽象基类。

2.为什么有?怎么用?

  • NSURLProtocol该如何使用才能让我们的APP更强大呢?

2.1 为网络请求提供自定义的响应

  • 不论是使用什么发起的网络请求,比如UIWebView、NSURLConnection甚至一些第三方的库,你都可以提供给这个请求一个自定义的响应体,包括 metaData 和 Data。当你想要删除掉 请求的响应用于测试时就可以使用NSURLProtocol。或者让请求加载本地的已经存在的自定义资源也可以使用这。

2.2 跳过网络活动,提供本地数据

  • 有时您可能认为没有必要触发网络请求来为应用程序提供所需的任何数据。 NSURLProtocol可以将您的应用程序设置为在本地存储或本地数据库中查找数据。

2.3重定向您的网络请求

  • 您是否想过能够重新定向网络请求到一个代理服务器,并且不需要为了取得用户的信任而遵循特定的iOS设置说明? NSURLProtocol就提供了控制请求的能力。您可以设置您的app拦截请求并重定向至另一个代理服务器或其他任何你想定向到的地方

2.4 修改请求的user-agent

  • 在触发任何网络请求之前,您可以决定更改其metadata或data。 例如,您可能想要更改user-agent。 如果您的服务器根据user-agent返回不同的内容,这可能很有用。 这方面的一个例子是手机和笔记本返回的内容之间的差异。

2.5 使用您自己的网络请求协议

  • 您获取会有自己的网络协议(比如,基于UDP实现的)。你可以在APP中实现它,你仍然可以使用你喜欢的网络库

不用说,可能性有超级多中,在这里列出所有使用NSURLProtocol的可能性很不切实际(并非不可能)。

虽然 NSURLProtocol非常强大,但要记住它不是网络库。它是一个工具,当你已经使用了网络库以后仍然可以使用它。简而言之,您可以在使用自己的库时充分利用NSURLProtocol的优势

二、碎碎念

1.

默认情况下,iOS URL加载系统支持以下方案:

ftp://用于文件传输协议

http://用于超文本传输协议

https://用于加密的超文本传输协议

file://用于本地文件URL

data://用于数据URL

三、自定义URL Loading

  • 没有用户喜欢一个永远在加载的页面。 所以现在你需要确保你的应用程序能够真的在处理请求。 只要在+ canInitWithRequest:方法中返回YES,就完全由您的类负责处理有关该请求的所有内容。 这意味着您需要获取所请求的数据并将其提供回URL加载系统。
  • 该怎样去获取所请求的数据呢

四、通过标签来切断循环

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容