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总结的更多相关文章

  1. [OC] NSURLSession

    有的程序员老了,还没听过NSURLSession 有的程序员还嫩,没用过NSURLConnection 有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSUR ...

  2. NSURLSession详解

    导语 现在NSURLConnection在开发中会使用的越来越少,iOS9已经将NSURLConnection废弃,现在最低版本一般适配iOS7,所以也可以使用. NSURLConnection相对于 ...

  3. iOS开发之Alamofire源码解析前奏--NSURLSession全家桶

    今天博客的主题不是Alamofire, 而是iOS网络编程中经常使用的NSURLSession.如果你想看权威的NSURLSession的东西,那么就得去苹果官方的开发中心去看了,虽然是英文的,但是结 ...

  4. [swift]NSURLSession

    一.简单说明 在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作. NSURLSession ...

  5. iOS网络2——NSURLSession使用详解

    原文在此 一.整体介绍 NSURLSession在2013年随着iOS7的发布一起面世,苹果对它的定位是作为NSURLConnection的替代者,然后逐步将NSURLConnection退出历史舞台 ...

  6. NSURLSession网络请求

    个人感觉在网上很难找到很简单的网络请求.或许是我才疏学浅 ,  所有就有了下面这一段 , 虽然都是代码 , 但是全有注释 . //1/获取文件访问路径 NSString *path=@"ht ...

  7. 网络第三节——NSURLSession

    有的程序员老了,还没听过NSURLSession有的程序员还嫩,没用过NSURLConnection有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSURLS ...

  8. 网络请求 __ NSURLSession

    首先配置into.plist文件 1. 添加 App Transport Security Settings , Type栏自动变为Dictionary 2. 点击左边箭头,使之向下,点击右边加号,添 ...

  9. NSURLSession访问网络数据

    1.NSMutableURLRequest的设置 //创建NSMutableURLRequest对象 NSMutableURLRequest *request = [NSMutableURLReque ...

随机推荐

  1. 软件工程(FZU2015)赛季得分榜,第11回合(beta冲刺+SE总结)

    目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 增补作业 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分:b ...

  2. 【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险

    http://www.lydsy.com/JudgeOnline/problem.php?id=2541 https://vijos.org/p/1366 loli秘制大爆搜_(:з」∠)_坑了好久啊 ...

  3. 【bzoj4514】 Sdoi2016—数字配对

    http://www.lydsy.com/JudgeOnline/problem.php?id=4514 (题目链接) 题意 n个数,每个数值为a[i],有b[i]个,权值为c[i].若两个数能配对当 ...

  4. bzoj2179: FFT快速傅立叶

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  5. markdown测试

    测试 1.第一点 这一点 代码块 @requires_authorization def somefunc(param1='', param2=0): '''A docstring''' if par ...

  6. Alpha阶段第七次Scrum Meeting

    情况简述 Alpha阶段第七次Scrum Meeting 敏捷开发起始时间 2016/10/28 00:00 敏捷开发终止时间 2016/10/29 00:00 会议基本内容摘要 跟助教进行了交流,明 ...

  7. 修改Firefox的User-Agent,伪装修改秘籍

    火狐浏览器修改userAgent的办法一: 在火狐浏览器地址栏输入"about:config",按下回车进入设置菜单. 找到"general.useragent.over ...

  8. 使用Pip安装distribute、nose、virtualenv

    1 安装distribute sudo pip install distribute 2 安装nose sudo pip install nose 3 安装virtualenv sudo pip in ...

  9. 10月25日下午PHP静态、抽象、接口

    多态(运行多态)概念:当父类引用指向子类实例,由于子类里面对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同状态.条件:1.必须发生在继承下2.必须重写父类方法3.父类引用调用该方法 如果 ...

  10. 烂泥:nginx、php-fpm、mysql用户权限解析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ilanni.blog.51cto.com/526870/1561097 本文首发 ...