当前位置: 首页 > 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.
    队列应该是一个串行队列,以确保回调的正确顺序。 如果为零,会话将创建一个串行操作队列,用于执行所有委托方法调用和完成处理程序调用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能家电入驻亚马逊VC有什么优势?为什么众多国内厂家都选择亚马逊VC?——WAYLI威利跨境助力商家
  • 实战 Springboot2 集成Redis 哨兵模式、集群模式、缓存管理、Lettuce拓扑刷新
  • 【Oracle点滴积累】解决ORA-20001: Latest xml inventory is not loaded into table故障的方法
  • 麻雀搜索算法(SSA)与支持向量机(SVM)结合的预测模型(SSA-SVM)及其Python和MATLAB实现
  • 指针(下)
  • 依赖倒置原则:构建灵活软件架构的基石 - 通过代码实例深入解析
  • 什么是 Java?
  • 使用Cisco软件进行模拟万维网配置访问服务器过程
  • 运维高级内容--lvs按权重值轮询调度
  • python从入门到精通:判断语句
  • Spring Boot集成sentinel快速入门Demo
  • SQL之使用存储过程循环插入数据
  • OSPF笔记
  • 搭建高可用OpenStack(Queen版)集群(十一)之OpenStack集成ceph服务
  • opencv 多线程分块处理
  • hexo+github搭建个人博客
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【comparator, comparable】小总结
  • 【css3】浏览器内核及其兼容性
  • 78. Subsets
  • ESLint简单操作
  • HashMap ConcurrentHashMap
  • JSDuck 与 AngularJS 融合技巧
  • mysql_config not found
  • nginx 配置多 域名 + 多 https
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP的类修饰符与访问修饰符
  • spring boot下thymeleaf全局静态变量配置
  • Theano - 导数
  • 和 || 运算
  • 前端存储 - localStorage
  • 前端技术周刊 2019-02-11 Serverless
  • 区块链分支循环
  • 算法之不定期更新(一)(2018-04-12)
  • 我有几个粽子,和一个故事
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 应用生命周期终极 DevOps 工具包
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​TypeScript都不会用,也敢说会前端?
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (done) 两个矩阵 “相似” 是什么意思?
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (分布式缓存)Redis哨兵
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十一)图像的罗伯特梯度锐化
  • (转)程序员疫苗:代码注入
  • (转)大型网站的系统架构
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .htaccess配置重写url引擎
  • .Net 8.0 新的变化
  • .NET 8.0 中有哪些新的变化?