URLSession之初窥门径

devtools/2024/9/24 1:24:46/

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/devtools/95712.html

相关文章

使用Java调用Apache commons-text求解字符串相似性实战

目录 前言 一、字符串距离的几种计算方法 1、Levenshtein 距离 2、Overlap Coefficient计算 3、Q-gram Matching 4、余弦相似性计算 二、基于余弦相似性的基地名称对比 1、加载百科中的基地信息列表 2、设置忽略词列表 3、将数据库地名和Excel进行对比 三、总结 前言…

Emacs23.x版本之重要特性及用法实例(一百五十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

智能化包括自动化与非自动化

智能化通常指的是系统或设备具备智能功能,以提高其自主性和效率。智能化可以分为自动化与非自动化两大类,每一类都有其独特的特点和应用场景。 一、自动化 自动化指的是系统能够在无需人为干预的情况下完成任务或操作。自动化系统通常依赖于预设的规则、…

“AI+Security”系列第2期(三):面向LLM(大语言模型)的漏洞挖掘与对齐防御研究

近日,由安全极客、Wisemodel 社区和 InForSec 网络安全研究国际学术论坛联合主办的“AISecurity”系列第 2 期——对抗!大模型自身安全的攻防博弈线上活动如期举行。 在此次活动中,前阿里云高级安全专家郑瀚带来了以《通往LLM安全对齐的道路…

汽车IVI中控OS Linux driver开发实操(二十三):驱动的设备probe及匹配

第一个函数:probe linux驱动模型是分成三个部分的,设备(结构体device),驱动(结构体device_driver),总线(结构体bus_type)。在Linux内核中,设备驱动通常会实现一个probe函数,它是

【protobuf】ProtoBuf——proto3语法详解、字段规则、消息类型的定义与使用、通讯录的写入和读取功能实现

文章目录 ProtoBuf5. proto3语法详解5.1 字段规则5.2 消息类型的定义与使用 ProtoBuf 5. proto3语法详解 在语法详解部分,依旧通过项目推进的方式开展教学。此部分会对通讯录多次升级,用 2.x 表示升级的版本,最终将完成以下内容的升级&#x…

东南大学:Wi-Fi 6搭档全光以太,打造“数智东南”信息高速路

东南大学:Wi-Fi 6搭档全光以太,打造“数智东南”信息高速路 - 华为企业业务 打好ICT底座,平台和应用层面就会非常通畅了。首先,出海企业的需求既有普遍性,也有垂直性行业的特性需求。普遍性需求需要通信、沟通数据和传…

【PostgreSQL教程】PostgreSQL 高级篇之连接(JOIN)

博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…