首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将NSURLConnection切换到NSURLSession后,自定义NSURLProtocol速度变慢

NSURLConnection是iOS中用于进行网络请求的类,而NSURLSession是iOS 7及以上版本引入的新的网络请求API。在将NSURLConnection切换到NSURLSession后,自定义NSURLProtocol的速度变慢可能是由于以下原因:

  1. NSURLSession的网络请求是基于NSURLSessionConfiguration进行配置的,而默认的NSURLSessionConfiguration使用的是持久化的缓存策略,这可能导致请求的速度变慢。可以通过自定义NSURLSessionConfiguration来调整缓存策略,以提高请求速度。
  2. 自定义NSURLProtocol可能会引入额外的处理逻辑,例如对请求进行拦截、修改等操作,这些额外的处理可能会导致请求速度变慢。可以通过优化自定义NSURLProtocol的实现,减少不必要的处理,以提高请求速度。
  3. NSURLSession在默认情况下使用的是HTTP/1.1协议,而NSURLConnection在iOS 7之前使用的是HTTP/1.0协议。由于HTTP/1.1协议支持持久连接和流水线请求等特性,相比HTTP/1.0协议可以更高效地利用网络资源。因此,切换到NSURLSession后可能会出现速度变慢的情况。可以通过设置NSURLSessionConfiguration的HTTPMaximumConnectionsPerHost属性来调整并发连接数,以提高请求速度。
  4. 可能存在其他因素导致速度变慢,例如网络环境、服务器性能等。可以通过使用网络调试工具、优化服务器端代码等方式来排查和解决问题。

总结起来,将NSURLConnection切换到NSURLSession后,自定义NSURLProtocol速度变慢可能是由于缓存策略、自定义处理逻辑、协议版本、网络环境等因素导致的。可以通过调整NSURLSessionConfiguration、优化自定义NSURLProtocol的实现、设置并发连接数等方式来提高请求速度。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发之NSURLProtocol的那些坑

接触过iOS系统中URL Loading System都知道,NSURLProtocol是如此地强大,可以拦截应用内几乎所有的网络请求(除了WKWebView),并可以修改请求头,返回client任意自定义的数据等等...class]]; 对于NSURLSession的请求,注册NSURLProtocol的方式稍有不同,是通过NSURLSessionConfiguration注册的 // NSURLSession...请求结束注销NSURLProtocol [NSURLProtocol unregisterClass:[CFHttpMessageURLProtocol class]]; 好了,到这里NSURLProtocol...,老老实实用古老的NSURLConnection算了。。。...这些网络请求需要依赖于runloop的,因此这些请求根本发不出去,所以必须使用异步请求,NSURLConnection/NSURLSession的异步请求的线程保证启动了runloop。

2.5K91

NSURLSessionNSURLConnection区别

使用现状 NSURLSessionNSURLConnection的替代者,在2013年苹果全球开发者大会上(WWDC2013)随iOS7一起发布的,是对NSURLConnection进行了重构优化的新的网络接口...下载任务方式 NSURLConnection下载文件时,先是整个文件下载到内存,然后再写入到沙盒,如果文件比较大,就会出现内存暴涨的情况。...NSURLConnection不能进行这个配置,相比较与NSURLConnection依赖与一个全局的配置对象,缺乏灵活性而言,NSURLSession有很大的改进了。...精指出传输类型,可以让系统快速响应,提高传输质量,延长电池寿命等。...它的大概思路是: 某种限制,续传暂停 暂停数据(当前数据)保存起来--_resumeData = resumeData; 条件允许续传时,使用resumeData创建新的NSURLSessionTask

1.5K60

有赞 App 如何实现动态域名

NSURLSession网络库接口进行了封装,那么想要拦截到网络请求,就需要使用官方提供的处理URL数据的类NSURLProtocol 。...请求开始,URL会加载系统创建的NSURLProtocol对象处理对应的URL请求,根据文档我们只需要创建一个子类继承自NSURLProtocol,通过registerClass:方法注册我们自定义的网络协议类...那么,我们需要解决的问题就是使用自定义NSURLProtocol来处理App所有的网络请求,苹果官方文档中CustomHTTPProtocol介绍了如何自定义NSURLPtotocol来实现网络拦截。...这里我们基于NSURLSession为例来说明如何进行自定义网络拦截,达到动态域名替换的目的。...以上就是自定义NSURLProtocol大体流程,配合上配置中心,我们就可以实现动态域名替换,当然你还可以做以下事情: 统计网络接口的失败率 重定向网络请求 自定义修改request 自定义返回网络请求的结果

5.6K31

NSURLPtotocol 网络hooker

先说下URL Loading System 如图所示,URL Loading System是iOS一系列网络请求类的集合,包括已经过期不用的NSConnection和现在流行的NSURLSession...忽略网络请求使用本地缓存 重定向网络请求 改变request的请求头 NSURLProtocol的使用 因为NSURLProtocol是一个虚基类,所以不能直接使用它,要想使用它就必须自定义一个类成为他的子类...NSURLProtocolClient 如果我们使用UIWebView发送一个request,拦截以后当我们使用NSURLSession发出了request,那么这个request的response是无法回到这个...NSURLProtocolClient就可以看做是URL Loading System,我们把response告诉client,也就是URL Loading System,让他来继续处理这个response,因为一都是基于...注意点 可以注册多个NSURLProtocol的子类,注册多个NSURLProtocol子类会逆序去执行,也就是先注册的子类执行。

38720

【IOS】总结-AFNetworking学习笔记

1.3 AFN 2.0版本 1.3.1 动机 · 兼容NSURLSession - NSURLSession 是 iOS 7 新引入的用于替代 NSURLConnection 的类。...在程序在前台时,NSURLSessionNSURLConnection可以互为替代工作。注意,如果用户强制程序关闭,NSURLSession会断掉。...NSURLSession提供的功能: 1.通过URL数据下载到内存 2.通过URL数据下载到文件系统 3.数据上传到指定URL 4.在后台完成上述功能 5.1.1 三种工作模式 默认会话模式(default...,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage,以及和它同名的NSURLConnection。...expectedTotalBytes:(int64_t)expectedTotalBytes; 只有下载成功才调用的委托方法,在该方法中应该下载成功的文件移动到我们想要的目标路径: [objc]

1.4K30

iOS-网络编程(二)文件上传和断点离线下载

NSURLSession:功能比NSURLConnection更加强大,苹果目前比较推荐使用这种技术 第三方框架AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多 二....NSURLConnection (已弃用) 虽然NSURLConnection已经被弃用,但是我们还是要了解NSURLConnection的用法,便于我们之后更好的理解NSURLSession。...请求数据的过程也可能非常耗时,我们能否请求数据的操作也放在子线程中进行呢?...第二,我们发现开始下载工程占用内存开始飙升,大约上升了我们下载的文件大小,这是因为fileData 这个属性在内存中也存储了一份我们下载的文件。...NSURLSesscion 常用方法 获得Session 获得共享的Session + (NSURLSession *)sharedSession; 自定义Session + (NSURLSession

2.3K80

2018 - iOS 面试题汇总一般面试题BAT面试题

; (6)数据交互方面:JSON与javascript的交互更加方便,更容易解析处理,更好的数据交互; (7)数据描述方面:XML对数据描述性比较好 (8)传输速度方面:JSON的速度远远快于XML...NSURLProtocol是做什么的 1.下载 NSURLConnection下载文件时,先是整个文件下载到内存,然后再写入到沙盒,如果文件比较大,就会出现内存暴涨的情况。...而cancel可以停止请求的发送,停止不能继续访问,需要创建新的请求。...使用NSURLSession进行断点下载更加便捷....NSURLConnection不能进行这个配置,相比较与NSURLConnection依赖与一个全局的配置对象,缺乏灵活性而言,NSURLSession有很大的改进 28.怎么高效的实现控件的圆角效果

6.4K30

iOS网络——NSURLSession详解及SDWebImage源码解析你要知道的NSURLSession都在这里

源码解析 iOS网络——AFNetworking AFHttpSessionManager源码解析 NSURLSession的基础使用 NSURLSession在iOS7时就推出了,为了取代NSURLConnection...,在iOS9时NSURLConnection被废弃了,包括SDWebImage和AFNetworking3也全面使用NSURLSession作为基础的网络请求类了。...NSURLSession相比于NSURLConnection来说提供的功能更加丰富,它支持HTTP2.0,提供了丰富的类来支持GET/POST请求、支持后台下载和上传,可将文件直接下载到磁盘的沙盒中。...自定义创建NSURLSession对象是为了监听由该session发起的网络请求的执行状态,代理方法比较多,上述栗子只罗列了三个常用的方法,有兴趣的读者可自行实验。...接下来的一个比较重要的方法就是接收到图片数据的处理,接收到数据就追加到可变数据中,如果需要在图片没有下载完成时就展示部分图片,需要进行一个解码的操作然后调用回调块图片数据回传,接着就会调用存储的进度回调块来通知现在的下载进度

2.9K100

iOS复习中有关SDWebImage可能知识点总结(1)

而真正实现图片下载的是自定义的一个Operation操作,将该操作加入到下载管理器的操作队列downloadQueue中,Operation操作依赖系统提供的NSURLConnection类实现图片的下载...则下载不再进行; ②下载完成了,但还没有执行到调用回调(回调包含wself.image = image),由于操作被取消,因而不会显示和重用的cell相同的图片; ③以上两种情况只有在网速极慢和手机处理速度极慢的情况下才会发生...3.1 基于NSURLConnection的SDWebImage (至少2014年7月的版本)老版本的基于 NSURLConnection 的 SDWebImage 是通过这样的机制:NSURLConnection...SDWebImageDownloaderOperation.m 3.2 基于NSURLSession的SDWebImage 然而,新版本的 SDWebImage 是基于 NSURLSession 的,这个...NSURLSession不同于NSURLConnection的最大区别是不是基于主线程 子线程 的runloop控制的,而是通过NSOperation新开子线程,所以同意主线程的runloop切换mode

85720

一个创建自定义事件源的例子

如果没有,运行循环立即退出。 有以下几种方法来启动 RunLoop : 无条件的: 无条件的进入你的 RunLoop 是最简单的选择,但也是最不可取的。...->AFNetworking NSURLSession ->AFNetworking2, Alamofire • CFSocket 是最底层的接口,只负责 socket 通信。...• NSURLSession 是 iOS7 中新增的接口,表面上是和 NSURLConnection 并列的,但底层仍然用到了 NSURLConnection 的部分功能 (比如 com.apple.NSURLConnectionLoader...通常使用 NSURLConnection 时,你会传入一个 Delegate,当调用了 [connection start] ,这个 Delegate 就会不停收到事件回调。...一个Demo 根据上面对NSURLConnection的介绍,我们模拟一个类似的设计来实现通过RunLoop来等待和处理事件。 第一步:创建任务线程 创建子线程,用于初始化一个接收自定义事件源。

2.1K100

WKWebView 那些坑

1、WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering...一旦注册 http(s) scheme ,网络请求将从 Network Process 发送到 App Process,这样 NSURLProtocol 才能拦截网络请求。...request2 header的body 字段复制到 request3 的 body 中,并使用 NSURLConnection 加载 request3,最后通过 NSURLProtocolClient...加载结果返回 WKWebView; 5、WKWebView 页面样式问题 在 WKWebView 适配过程中,我们发现部分H5页面元素位置向下偏移或被拉伸变形,追踪发现主要是H5页面高度值异常导致...然而这种方式依然解决不了 webGL 页面的截屏问题,笔者已经翻遍苹果文档,研究过 webKit2 源码里的截屏私有API,依然没有找到合适的解决方案,同时发现 Safari 以及 Chrome 这两个全量切换到

4.5K130

WKWebView 那些坑

1、WKWebView白屏问题 WKWebView自诩拥有更快的加载速度,更低的内存占用,但实际上WKWebView是一个多进程组件,Network Loading以及UI Rendering在其它进程中执行...3、WKWebView NSURLProtocol问题 WKWebView在独立于app进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在WKWebView上直接使用NSURLProtocol...一旦注册http(s) scheme,网络请求将从network process发送到app process,NSURLProtocol才能拦截网络请求。...header的body字段复制到request3的body中,并通过NSURLConnection加载request3,最后加载结果返回WKWebView; 5、WKWebView 页面样式问题 在...然而这种方式依然解决不了webGL页面的截屏问题,笔者已经翻遍苹果文档,研究过各种webKit2源码里的截屏私有API,依然没有找到合适的解决方案,同时发现Safari以及Chrome这两个全量切换到

17.1K21

老司机出品———疯狂造轮子之图片异步下载类

其次我们需要一个图片缓存类,图片下载完成时图片进行缓存。 最后我们需要一个下载任务管理类,帮助我们管理当前下载任务,避免重复下载。 那我们接下来一一分析相关需求。...NSURLSession是iOS7推出的与NSURLConnection并列的网络请求库,并且在iOS9中苹果宣布废弃NSURLConnectionNSURLSession从此正式步入历史舞台,大多数还在维护的网络相关的三方库都跟随苹果的脚步底层...Api替换为NSURLSession相关。...在后台时,网络传输交给系统的单独的一个进程。...所以确定了内存缓存的实现方式,我们只要部署缓存逻辑即可。 我们知道,内存读取速度是要大于磁盘读取速度的,所以当去缓存的时候我们优先取内存缓存使我们的主要策略。

47140

Runloop(4):应用

,在RunLoop中,需要处理的事件分两类,一种是输入源,一种是定时器,定时器好理解就是那些需要定时执行的操作,输入源分三类:performSelector源,基于端口(Mach port)的源,以及自定义的源...5、手势识别 当上面的 _UIApplicationHandleEventQueue() 识别了一个手势时,其首先会调用 Cancel 当前的 touchesBegin/Move/End 系列回调打断...• NSURLSession 是 iOS7 中新增的接口,表面上是和 NSURLConnection 并列的,但底层仍然用到了 NSURLConnection 的部分功能 (比如com.apple.NSURLConnectionLoader...下面主要介绍下 NSURLConnection 的工作过程。...通常使用 NSURLConnection 时,你会传入一个 Delegate,当调用了 [connection start] ,这个 Delegate 就会不停收到事件回调。

27120

SDWebImageV3.7.5源码解析

如果是SDWebImage自定义的对象肯定会实现自定义的取消协议,则转换对象取消。 否则直接这个object从字典中删除。 至此,取消当前图片下载步骤完毕。...如果没找到,再从其他我们自定义的缓存路径下查找。 这里的key(即网络图片的完整路径),需要将其进行MD5加密,然后图片在本地的名称就是加密的名称。...第四行,图片根据设备的屏幕品质,进行缩放处理,返回发缩放的图片。...关于图片的缓存和解码可以看这里:iOS 处理图片的一些小 Tip 关于图片的解码过程可以看这篇C语言文章:JPEG图像的解压缩操作 6.4 解码的图片保存到缓存memCache中,便于以后直接从缓存中获取...当然,随着版本更迭,SDWebImage V3.8.0之后(包括V3.8.0)已经NSURLConnection换成了NSURLSession,然后利用NSURLSession 的代理方法来更新progressBlock

82230
领券