URLSession之初窥门径

ops/2024/9/24 11:02:37/

NSURLSession 于 2013 年随 iOS 7 的发布一起面世,苹果将其定位为 NSURLConnection 的替代者。我们使用最广泛的第三方框架如 AFNetworkingSDWebImage 的最新版也都已经全面切换至 NSURLSession

NSURLSession 不仅仅指代同名类 NSURLSession,它还包括一系列相互关联的类,包括 NSURLSessionConfiguration 以及 NSURLSessionTask 的四个子类:NSURLSessionDataTaskNSURLSessionUploadTaskNSURLSessionDownloadTaskNSURLSessionStreamTask(后者在 iOS 9 中引入)。此外,它还与 NSURLRequestNSURLCache 这两个此前已经存在的类密切相关。

// 在 iOS 9 之后,苹果官方建议开发者使用 `NSURLSession` 代替 `NSURLConnection`,但 `NSURLConnection` 并未完全移除,仍可在 iOS 9 及之后的版本中使用
API_DEPRECATED("Use NSURLSession (see NSURLSession.h)", ios(2.0,9.0))
  1. Swift 中, NSURLSession 被重命名为 URLSession ;
  2. iOS13 增加了一个 URLSessionWebSocketTask ;

URLSession 的用法

NSURLSession 本身是不会进行请求的,而是通过创建 task 的形式进行网络请求,同一个 URLSession 可以创建多个 task,并且这些 task 之间的 cache 和 cookie 是共享的。

NSURLSession 的使用有如下几步:

  • 创建一个 NSURLSession 对象
  • 使用 NSURLSession 对象创建一个 Task
  • 启动执行 Task( resume( ) 方法)

URLSession 的创建

有两种方式创建 NSURLSession 对象:

  • 默认 NSURLSession 对象(shared)
    //创建默认的Session对象,会使用全局的Cache,cookie和证书
    let session = URLSession.shared
    
  • 自定义 NSURLSession 对象(利用configuration配置)
    // 自定义创建Session对象需要先创建配置对象
    let config = URLSessionConfiguration.default// 自定义创建Session对象
    let session = URLSession(configuration: config)// 创建
    let session = URLSession(configuration: config, delegate: self as! URLSessionDelegate, delegateQueue: nil)
    
  1. 使用代理可以处理身份验证失败、重定向、进度更新等功能
  2. The queue should be a serial queue, in order to ensure the correct ordering of callbacks. If nil, the session creates a serial operation queue for performing all delegate method calls and completion handler calls.
    队列应该是一个串行队列,以确保回调的正确顺序。 如果为零,会话将创建一个串行操作队列,用于执行所有委托方法调用和完成处理程序调用

http://www.ppmy.cn/ops/93347.html

相关文章

第十一章:图论part06 108.冗余连接 109.冗余连接II (补)

任务日期:7.31 题目一链接:108. 冗余连接 (kamacoder.com) 思路:从前到后遍历边,如果当前两个点不在一个集合就使他们加入到一个集合,构成树,如果位于一个集合则输出他们,因为如果把他们加入就…

基于Python与OpenCV的图像处理:滤波器相关算法详解

文章目录 概要整体架构流程一、众数滤波(Median Filter)二、高斯滤波(Gaussian Filter)三、均值滤波(Average Filter/Box Filter)总结 概要 在图像处理中,滤波器是一种用于修改或增强图像的重要…

【Linux SQLite数据库】一、SQLite交叉编译与移植

SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎,它提供了功能齐全的数据库解决方案。SQLite 几乎可以在所有的手机和计算机上运行,它被嵌入到无数人每天都在使用的众多应用程序中。此外,SQLite 还具有稳定…

阿里云CDN-边缘脚本EdgeScript的CI/CD实践

阿里云CDN-ES脚本CI/CD实践 背景环境项目代码结构及发布脚本代码1. 项目结构2. 发布工具代码 流水线配置1. 流程配置2. 脚本代码发布脚本说明0. 配置账户1. 清空测试环境(回滚测试环境)2. 执行脚本发布3. 发布(测试环境推送到生产环境&#x…

基于VEH的无痕HOOK

这里的无痕HOOK指的是不破坏程序机器码,这样就可以绕过CRC或MD5的校验。 VEH利用了Windows的调试机制和异常处理,人为抛出异常,从异常的上下文中获取寄存器信息。 DLL入口 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" #include "CHoo…

vs code编辑区域右键菜单突然变短

今天打开vs code发现鼠标在编辑区域按右键,出来的菜单只显示一小段 显示不全,而之前的样子是 显示很多项,怎么设置回到显示很多项呢?

立体相机镜面重建(二)双目立体镜面重建

使用双目相机,配合镜子、屏幕,可以直接获得镜面的三维数据,无需先验知识。因此使用双目镜面重建方式对镜子表面进行重建。 (一)重建步骤 使用左相机光线法来计算镜面点: 1.取一个像素点,计算其…

图论------如何使用矩阵来存储图的信息(邻接矩阵表示法)。

文章概述: 刚开始图论我们先不急于解决实际的问题,先去搞明白如何存储图的信息。实际上我们早就接触过类似的内容,比如上一篇文章的开灯关灯游戏中,我们使用一维数组来表示一排灯的状态,但是如果要表示更加复杂的内容怎…