NSURLSession(二)

iOS网络开发NSURLSession(二)DataTask+Demo 原创blog,转载请注明出处 blog.youkuaiyun.com/hello_hwc欢迎关注我的IOS-SDK讲解专栏 http://blog.youkuaiyun.com/column/details/huangwenchen-ios-sdk.html前言: 这是IOS 网络开发系列的第三篇文章,这篇文章主要介绍了NSURLSession以及NSURLSessionTask这个抽象类,和NSURLSession 阅读详情

Session Task分为三种Data Task,Upload Task,Download Task。毫无疑问,Session Task是整个NSURLSession架构的核心目标。

下面写了一个简单的Demo来初步使用下三种任务对象。这里使用的是convenience methods,并没有定制session和使用协议,都是采用completionHandler作为回调动作。


故事板内容为:



第一种Data Task用于加载数据,使用全局的shared session和dataTaskWithRequest:completionHandler:方法创建。代码如下:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /* 使用NSURLSessionDataTask加载网页数据 */  
  2. - (IBAction)loadData:(id)sender {  
  3.     // 开始加载数据,让spinner转起来  
  4.     [self.spinner startAnimating];  
  5.       
  6.     // 创建Data Task,用于打开我的csdn blog主页  
  7.     NSURL *url = [NSURL URLWithString:@"http://blog.youkuaiyun.com/u010962810"];  
  8.     NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  9.     NSURLSession *session = [NSURLSession sharedSession];  
  10.     NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request  
  11.                                                 completionHandler:  
  12.                                       ^(NSData *data, NSURLResponse *response, NSError *error) {  
  13.                                           // 输出返回的状态码,请求成功的话为200  
  14.                                           [self showResponseCode:response];  
  15.                                             
  16.                                           // 在webView中加载数据  
  17.                                           [self.webView loadData:data  
  18.                                                         MIMEType:@"text/html"  
  19.                                                 textEncodingName:@"utf-8"  
  20.                                                          baseURL:nil];  
  21.                                             
  22.                                           // 加载数据完毕,停止spinner  
  23.                                           [self.spinner stopAnimating];  
  24.                                       }];  
  25.     // 使用resume方法启动任务  
  26.     [dataTask resume];  
  27. }  
  28.   
  29. /* 输出http响应的状态码 */  
  30. - (void)showResponseCode:(NSURLResponse *)response {  
  31.     NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;  
  32.     NSInteger responseStatusCode = [httpResponse statusCode];  
  33.     NSLog(@"%d", responseStatusCode);  
  34. }  

completionHandler指定任务完成后的动作。注意一定要使用resume方法启动任务。(Upload Task和Download Task同理)

运行结果:



第二种Upload Task用于完成上传文件任务,使用方法类似:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /* 使用NSURLSessionUploadTask上传文件 */  
  2. - (IBAction)uploadFile:(id)sender {  
  3. //    NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];  
  4. //    NSURLRequest *request = [NSURLRequest requestWithURL:URL];  
  5. //    NSData *data = ...;  
  6. //      
  7. //    NSURLSession *session = [NSURLSession sharedSession];  
  8. //    NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request  
  9. //                                                               fromData:data  
  10. //                                                      completionHandler:  
  11. //                                          ^(NSData *data, NSURLResponse *response, NSError *error) {  
  12. //                                              // ...  
  13. //                                          }];  
  14. //      
  15. //    [uploadTask resume];  
  16. }  


第三种Download Task用于完成下载文件的任务,使用全局的shared session和downloadTaskWithRequest:completionHandler:方法创建。

注意:在下载任务完成后,下载的文件位于tmp目录下,由代码块中的location指定(不妨输出看看),我们必须要在completion handler中将文件放到持久化的目录下保存。代码如下:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /* 使用NSURLSessionDownloadTask下载文件 */  
  2. - (IBAction)downloadFile:(id)sender {  
  3.     [self.spinner startAnimating];  
  4.       
  5.     NSURL *URL = [NSURL URLWithString:@"http://b.hiphotos.baidu.com/image/w%3D2048/sign=6be5fc5f718da9774e2f812b8469f919/8b13632762d0f703b0faaab00afa513d2697c515.jpg"];  
  6.     NSURLRequest *request = [NSURLRequest requestWithURL:URL];  
  7.     NSURLSession *session = [NSURLSession sharedSession];  
  8.     NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request  
  9.                                                             completionHandler:  
  10.                                               ^(NSURL *location, NSURLResponse *response, NSError *error) {  
  11.                                                   [self showResponseCode:response];  
  12.                                                     
  13.                                                   // 输出下载文件原来的存放目录  
  14.                                                   NSLog(@"%@", location);  
  15.                                                     
  16.                                                   // 设置文件的存放目标路径  
  17.                                                   NSString *documentsPath = [self getDocumentsPath];  
  18.                                                   NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];  
  19.                                                   NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:[[response URL] lastPathComponent]];  
  20.                                                     
  21.                                                   // 如果该路径下文件已经存在,就要先将其移除,在移动文件  
  22.                                                   NSFileManager *fileManager = [NSFileManager defaultManager];  
  23.                                                   if ([fileManager fileExistsAtPath:[fileURL path] isDirectory:NULL]) {  
  24.                                                       [fileManager removeItemAtURL:fileURL error:NULL];  
  25.                                                   }  
  26.                                                   [fileManager moveItemAtURL:location toURL:fileURL error:NULL];  
  27.                                                     
  28.                                                   // 在webView中加载图片文件  
  29.                                                   NSURLRequest *showImage_request = [NSURLRequest requestWithURL:fileURL];  
  30.                                                   [self.webView loadRequest:showImage_request];  
  31.                                                     
  32.                                                   [self.spinner stopAnimating];  
  33.                                               }];  
  34.       
  35.     [downloadTask resume];  
  36. }  
  37.   
  38. /* 获取Documents文件夹的路径 */  
  39. - (NSString *)getDocumentsPath {  
  40.     NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  41.     NSString *documentsPath = documents[0];  
  42.     return documentsPath;  
  43. }  

运行结果:




这个Demo中没有为NSURLSession指定session的delegate,所以没有使用委托中的方法,功能比较有限,而且也没有自行定制session的配置,所以只能执行简单的任务,但是对于加载数据,下载一张图片等任务已经可以应付自如。对于创建后台下载任务,支持断点续传的下载任务等将在下一篇文章中分析介绍。

顶
2
URL加载系统NSURLSession 之URLSessionConfiguration的使用【二】 简介: NSURLSession是IOS SDK提供的一组相对容易使用的网络API。它包括几个部分URLSessionConfiguration、URLSessionDelegate、URLSessionTask(组)、URLRequest、URLCache、 URLSessionConfiguration指定NSURLSession的配置信息。这些配置信息决定了NSURLSession的种类... 阅读详情

相关推荐

NSURLSession学习笔记(二)Session Task对应的Demo

NSURLSession学习笔记(二)Session Task对应的Demo,简单介绍下Data Task和Download Task的使用方法。

NSURLSession学习笔记(二)Session Task

Session Task分为三种Data Task,Upload Task,Download Task。毫无疑问,Session Task是整个NSURLSession架构的核心目标。 下面写了一个简单的Demo来初步使用下三种任务对象。这里使用的是convenience methods,并没有定制session和使用协议,都是采用completionHandler作为回调动作。

majiakun1的专栏 3万+

如何用Timer模型处理多变量时间序列?附完整代码示例

本文深入解析了如何运用清华大学的Timer模型处理多变量时间序列预测任务。通过一个完整的智能工厂设备监控实战案例,详细介绍了从数据预处理、模型构建、训练调优到预测可视化的全流程,并提供了可运行的完整代码示例,帮助开发者掌握这一强大的时序分析工具。

weixin_29243063的博客 250

iOS 7系列译文:忘记NSURLConnection,拥抱NSURLSession吧!

原文链接: Mattt Thompson   翻译: 伯乐在线 - ylovesy 译文链接: http://blog.jobbole.com/52477/ 说到 iOS 7 和 Mac OS X 10.9 Mavericks 的显著变化,其中一个就是Foundation框架中URL加载系统的优化。 此时可能有人正沉浸在Apple的网络基础架构,我想在这里分享一下

baoyy的专栏 844

从外包到转正:一个华为OD亲历者的真实工作体验与避坑指南

本文分享了一位华为OD员工从外包到转正的真实经历与实用建议。通过详细解析华为OD的日常工作、转正核心指标、机试备考技巧及职场突围策略,为读者提供了一份全面的避坑指南。特别针对机试E卷的高频考点和刷题方法,给出了具体的数据分析和实战经验。

weixin_33686714的博客 697

Cadence Virtuoso VIVA波形分析:从背景色修改到线宽调整的完整指南

本文详细介绍了Cadence Virtuoso VIVA波形分析工具的核心使用技巧,包括背景色修改、线宽调整等高级功能。通过具体操作步骤和配置方法,帮助工程师优化波形显示效果,提升工作效率。特别强调了与Calculator组件的配合使用,以及专业波形图的输出技巧。

weixin_27330481的博客 621

NSURLSession使用详解

NSURLSession诞生于2013年,但其在前几年一直生活在NSURLConnection的阴影下,直到iOS9的出现,NSURLConnection被官方宣布弃用,才正式走向舞台。NSURLSession老程序员原来很少用,NSURLConnection新程序员甚至不知道,还有些程序员只知道AFN。

u010347934的专栏 872

告别GPS,用Sentinel-1数据+Python实战SBAS-InSAR监测城市地面沉降(保姆级教程)

本文详细介绍了如何利用Sentinel-1数据和Python实现SBAS-InSAR技术监测城市地面沉降。通过保姆级教程,从环境配置、数据获取到干涉处理、时序分析和形变反演,逐步解析全流程技术细节,帮助读者掌握毫米级精度的形变监测方法,并以上海陆家嘴区域为例展示实际应用效果。

weixin_32771907的博客 534

iOS NSURLSession的简单使用

一.为什么要使用NSURLSession来替换NSURLConnection 1.在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作。 2.NSURLSession的优势: NSURLSession支持http2.0协议 处理下载任务的时候可以直接把数据下载到磁盘中 支持后台下载和上传 同一个session发送多次请求,只需要建立一次连接(复用了TCP) 提供了全局的session并且可以统一配置,

假装你是大灰狼的专栏 1719

【25届数字IC秋招总结】面试经验7——联发科

25届数字ic面试记录——联发科

lalala0635的博客 981

Codex、Claude Code、Opus、Trae、Cursor:一文讲懂 2026 AI 编程工具格局

2026年AI编程工具将形成三层体系:模型层(Opus/Codex)负责思考,执行层(Claude Code/Codex Agent)负责自动开发任务,工具层(Cursor/Trae)提供AI集成的开发环境。关键区别在于Agent路线强调AI主导自动化开发,而IDE路线保持人类主导。未来竞争力取决于能否将AI整合为生产力系统,掌握模型推理、Agent任务编排和AI IDE协同三大能力。核心转变是从"写代码"升级为"指挥AI写代码",高级玩家通过组合不同层级工具构建自动

m0_51738372的博客 2690

NSURLSession(二)POST请求

NSURLSession(二)POST请求 2015-03-28      0 个评论    来源:Default is Zero.   收藏    我要投稿 //1.构造URL NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/2/statuses/update.json"]; //2.构造Req

zhanglizhi111的博客 602

【OpenClaw企业级智能体实战】第04篇:OpenClaw成本优化实战——Token消耗降96%!claude-mem+OpenViking从入门到精通

OpenClaw作为企业级智能体框架,凭借强大的自动化能力成为企业数字化转型的热门工具,但原生机制导致的上下文冗余问题,让众多用户面临“Token消耗失控”的困境——单周账单数千元的案例屡见不鲜。本文基于阿里云实测数据与开源工具官方文档,先深度拆解OpenClaw成本黑洞的核心成因(记忆碎片化、Token指数级膨胀),再系统讲解两款核心优化工具(claude-mem单Agent记忆管理、OpenViking多Agent集群底座)的底层原理、算法架构与实现逻辑,提供从环境搭建、工具集成、参数调优到安全部署

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 703

系统网络框架NSURLSession(二)

NSURLSessionDataTask 大文件离线断点下载 主要内容 实现文件下载监听文件的下载进度解决内存飙升问题常用操作:开始 | 暂停 | 取消 | 恢复断点下载离线断点下载实现源码 1. 实现文件下载 对于文件下载的实现这里就不再赘述,如果记不太清的话可以参考篇头提到的文章,里面有详细介绍,这里我就上代码了 //01 确定请求路径 NSURL *URL =

allanGold 692

基于matlab的阈值分割的车牌定位识别系统

车牌自动识别模块是现代社会智能交通系统(ITS)的重要组成部分,是图像处理和模式识别技术研究的热点,具有非常广泛的应用。车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别。本案例通过对采集的车牌图像进行灰度变换、边缘检测、腐蚀及平滑等过程进行车牌图像预处理,并由此得到一种基于车牌颜色纹理特征的车牌定位方法,最终实现了车牌区域定位。车牌字符分割是为了方便后续对车牌字符进行匹配,从而对车牌进行识别。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 967

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS学习笔记13-网络(二)NSURLSession

在2013年WWDC上苹果揭开了NSURLSession的面纱,将它作为NSURLConnection的继任者。现在使用最广泛的第三方网络框架:AFNetworking、SDWebImage等等都使用了NSURLSession。作为iOS开发人员,应该紧随苹果的步伐,不断的学习,无论是软件的更新、系统的更新、API的更新,而不能墨守成规。 相比较NSURLConnection,NSUR...

diaohuo9052的博客 206

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

iOS 文件下载:使用 NSURLSession 实现高效下载(二)

在 iOS 开发过程中,文件下载功能广泛应用于各种场景:从下载用户上传的文档、媒体文件,到提供应用更新包等。这些操作在现代应用中变得越来越常见,因此掌握如何通过高效、稳定的方法进行文件下载显得尤为重要。 本篇博客将介绍如何使用 NSURLSession 实现文件下载进阶功能:进度回调,后台下载。

qq_43673244的博客 826

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NSURLSession笔记(二)Session Task

Session Task分为三种Data Task,Upload Task,Download Task。毫无疑问,Session Task是整个NSURLSession架构的核心目标。 下面写了一个简单的Demo来初步使用下三种任务对象。这里使用的是convenience methods,并没有定制session和使用协议,都是采用completionHandler作为回调动作。

沐阳的博客 449
上一篇: URL Session(一)
下一篇: NSURLSession(三)
xiaoliu_iOS
博客等级 码龄11年 4粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值