当前位置: 首页 > news >正文

URLSession之初窥门径

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.lryc.cn/news/421798.html

相关文章:

  • ios创建控制器的3种方法实现页面跳转
  • Android逆向题解-boomshakalaka-3-难度5
  • Linux(Ubuntu 22.04)系统中固定串口
  • LeetCode - 209 - 长度最小的子数组
  • 探索空间计算与VR中的手势跟踪新纪元:XHand框架详解
  • leetcode + 项目复习
  • 树莓派4/5:设置apt、pip、conda首选清华镜像源
  • NoSQL 之Redis集群模式
  • oracle rac
  • 计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI
  • 【Linux】学习Linux,需要借助具象化的思维
  • R语言贝叶斯方法在生态环境领域技术教程
  • mojo实现高阶函数(algorithm)
  • 先进制造aps专题二十四 云平台排产aps的方案设计
  • JavaScript 逆向技巧总结
  • linux反向代理原理:帮助用户更好地优化网络架构
  • 开源DevOps工具链管理:DevStream
  • 图数据库框架及其支持的开发语言和应用场景
  • 【Linux 18】核心转储
  • 远程传输文件至服务器—spc 传输
  • HarmonyOS.FA开发流程
  • 三级_网络技术_21_无线局域网设备安装与调试
  • 机械学习—零基础学习日志(项目实践01)
  • SpringBoot排除默认日志框架
  • 质量管理理论(至简)
  • kaggle中访问本地上传的图片(找到图片地址)
  • ChatGPT到底是什么?它能做到什么?我们怎么才能使用到
  • 浦科特M6S固态硬盘数据丢失与恢复:全方位指南
  • gdb: 编译,lzma,configure: error: missing liblzma for --with-lzma
  • LInux - 一文了解 ssh端口敲门knock