NSURLSession总结
NSURLSession(会话)(ios7新增加)
//英译 Session:会议,讲话 configuration:结构,配置 expect:预期 resume:取得 suspend:推迟 progress:进展 submit:提交 allow:允许 present:呈现
NSURLSessionTask(任务父类不能直接使用)
NSURLSessionDataTask:用于JSON XML HTML 的GET,POST请求
NSURLSessionDownloadTask:处理文件下载的任务,可以通过代理方式监听下载进度,可以通过是指会话的配置,允许后台下载
NSURLSessionConfiguration:会话三种配置,默认,临时,后台;大部分时候用单例模式即可,使用后台运行才用这个..
NSURLSessionUploadTask:继承NSURLSessionDataTask
处理
//服务器返回数据是少量多次的,不是一次性全部返回,有三个任务,一个数据任务,一个下载任务,一个上传任务,使用NSURLSession所有的网络访问都是有缓存的,缓存文件会默认保存到沙盒的tmp文件夹中,并且删除它,它是线程安全的,无需考虑加锁之类
发送请求,接收体积较大的文件
//用NSURLConnection 发送请求获得数据,当数据较大时,程序会直接闪退,或崩溃,所以成就了AFN框架(AFN的线程安全并不好)
由于AFN的线程安全并不好,所以在所下载时,用进度条监听进度时候,有时候会超过100%.
iphone4内存:512M IPAD1: 256M
//所以downLoadTask是直接和临时文件打交道,不是和内存数据打交道,能节约内存空间的占用
//沙盒---问题
NSString *document= NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)[0] ;
NSString *path= [document stringByAppendingPathComponent:@"123.mp4"];
NSURL *pathUrl=[NSURL fileURLWithPath:path];
直接写进document文件中
@"NSURLSession应用
//发送GET请求(dataTask)/NSURLConnection
实现-封装请求
--NSURLSession单例->对象调用dataTask,参数为request返回值为数据任务,块代码会返回data,response,error,可以使用data了->任务调用resume(开启任务)
//发送POST请求(dataTask)/NSURLConnection
实现-封装请求,指定请求类型,数据体(URL路径异于GET路径)
剩下的与GET一样
//发送Download请求(dawnloadTask)
封装URL(需要转码)
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
路径字符串->转码->封装成URL
实例化单例Session->对象调用downloadtask,参数URLD的返回值为下载任务,块代码返回的有location(本地保存下载文件路径)response(相应)error->任务调用resume(开启任务)
缓存文件会默认保存到沙盒的tmp文件夹中,复制到沙盒文件夹
拿到下载文件的名字类型->作为写进沙盒文件的路径名字(建沙盒路径,用新名字拼串component )
///怎么将一个文件的内容copy到另一个文件
将文件路径转为URL用 fileURLWithPath
创建文件管理者->调用copy方法 URL ToURL
//发送Download[断点续传]请求
实例化队列,实现代理,创建URL,给控制器添加协议
会话匹配有三种类型:
NSURLSessionConfiguration:会话三种配置,默认,临时,后台;大部分时候用单例模式即可,使用后台运行才用这个..
类方法带会话配置(configuration)代理,队列,为参数来实例化Session->对象方法调用downloadTask(参数只有URL)->任务开启
实现三个代理方法
第一个:下载完成,带参数location,可以拿到下载文件
第二个:
第三个:下载进度跟踪,三个返回参数bytesWritten(当前下载) totalBytesWritten(已经下载) totalBytesExpectedToWrite(总长度)
这里可以弄个进度条做个更新(且!放在主线程中作更新)
//做上传UPload(PUT类型)
封装request,由于是put请求需指定保存文件的文件名
将上传信息转为Data类型
实例化单例对象Session->对象调用uploadTask参数request,上传Data数据,块代码返回参数data(上传成功的提示信息),response,error->任务开启
//做暂停的具体实现
- (IBAction)pauseResume:(UIButton *)sender
{
sender.tag=!sender.tag;
if (sender.tag){
[_downLoadTask suspend];
}else{
[_downLoadTask resume];
}
}
//从图片库里上传图片到服务器
picker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;
实例化UIImagePickerController对象(正常init)->设置对象(包括来源,可编译,设置代理)->显示视图[self present]
实现代理方法
UIImage *image = info[UIImagePickerControllerEditedImage];
取出照片->设置照片->调用上传方法->关闭照片选择器[self dismiss]
//上传文件
//正常网页 用户->UPload.html(准备上传文件,指定文件名)->UPload.php(将用户选择的文件上传到服务器预设好的位置)
//AFN(IOS) 用户将要上传的文件转变成二进制数据并且指定上传后的文件名
//NSURLSession 用户直接上传文件到服务器的预设好的文件 put
//从照片库里选择图片
//关于多线程
初衷:解决在一个CPU上实现并发的技术(队列是调度任务的)
NSURLSession总结的更多相关文章
- [OC] NSURLSession
有的程序员老了,还没听过NSURLSession 有的程序员还嫩,没用过NSURLConnection 有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSUR ...
- NSURLSession详解
导语 现在NSURLConnection在开发中会使用的越来越少,iOS9已经将NSURLConnection废弃,现在最低版本一般适配iOS7,所以也可以使用. NSURLConnection相对于 ...
- iOS开发之Alamofire源码解析前奏--NSURLSession全家桶
今天博客的主题不是Alamofire, 而是iOS网络编程中经常使用的NSURLSession.如果你想看权威的NSURLSession的东西,那么就得去苹果官方的开发中心去看了,虽然是英文的,但是结 ...
- [swift]NSURLSession
一.简单说明 在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作. NSURLSession ...
- iOS网络2——NSURLSession使用详解
原文在此 一.整体介绍 NSURLSession在2013年随着iOS7的发布一起面世,苹果对它的定位是作为NSURLConnection的替代者,然后逐步将NSURLConnection退出历史舞台 ...
- NSURLSession网络请求
个人感觉在网上很难找到很简单的网络请求.或许是我才疏学浅 , 所有就有了下面这一段 , 虽然都是代码 , 但是全有注释 . //1/获取文件访问路径 NSString *path=@"ht ...
- 网络第三节——NSURLSession
有的程序员老了,还没听过NSURLSession有的程序员还嫩,没用过NSURLConnection有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSURLS ...
- 网络请求 __ NSURLSession
首先配置into.plist文件 1. 添加 App Transport Security Settings , Type栏自动变为Dictionary 2. 点击左边箭头,使之向下,点击右边加号,添 ...
- NSURLSession访问网络数据
1.NSMutableURLRequest的设置 //创建NSMutableURLRequest对象 NSMutableURLRequest *request = [NSMutableURLReque ...
随机推荐
- 安装MySQL的时候遇到的错误
这里我安装的是MySQL5.6 我遇到的错误有 (1)Warning: Bison executable not found in PATH 解决办法: yum install bison 原文摘自: ...
- [转]Hibernate延迟加载与opensessioninviewFilter
原文地址:http://blog.csdn.net/a19881029/article/details/7916702 hibernate延迟加载: 一个person对应多个school,使用hibe ...
- [转] Struts2入门示例教程
原文地址:http://blog.csdn.net/wwwgeyang777/article/details/19078545/ 回顾Struts2的使用过程,网上搜的教程多多少少都会有点问题,重新记 ...
- 微信小程序-关于post 过来服务器没有获取到数据问题
查看一下服务器接收的post 参数是以什么形式接收的 微信给出得demo 请求的方式是Json 参数传递的 所以如果服务器使用的from 表单形式接收数据需要更改微信小程序中的 header 将 he ...
- JavaScript零基础学习系列三
函数 函数:为了完成某个功能而定义的代码的集体.函数是数据类型,只读的对象:函数也是对象:代码的重用.(JavaScript中) 定义语法:function 函数名(形式参数1,形式参数2--){ / ...
- 如何在Mac OS X上安装 Ruby运行环境
对于新入门的开发者,如何安装 Ruby和Ruby Gems 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境.此安装方法同样适用于产品环境! 系统需求 首先确定操 ...
- c#使用正则表达式抓取a标签的链接和innerhtml
//读取网页html string text = File.ReadAllText(Environment.CurrentDirectory + "//test.txt", Enc ...
- mysql 函数 GROUP_CONCAT 单元格中最长字符串和excel导出问题
GROUP_CONCAT 使用方式GROUP_CONCAT ([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) SELECT ...
- C++ GC
http://www.codeproject.com/Articles/912/A-garbage-collection-framework-for-C http://www.codeproject. ...
- thinkphp3.2与phpexcel解析
1.impot导入 第一种方式: import("Org.Util.PHPExcel.TextT"); $tt = new \TextT(); //创建PHPExcel对象,注意, ...