URLSession

URLSession

NSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的。

当程序在前台时,NSURLSession与NSURLConnection大部分可以互相替代

NSURLSession支持后台网络操作,除非用户强行关闭

NSURLSession提供的功能:

p通过URL将数据下载到内存
p通过URL将数据下载到文件系统
p将数据上传到指定URL
p在后台完成上述功能
p
p对于小型数据,例如用户登录、下载小图像、JSON & XML仍然使用NSURLConnection的异步或同步方法即可

NSURLSession的使用

使用NSURLSessionConfiguration来配置NSURLSession对象

用NSURLSession对象来启动一个NSURLSessionTask对象

也可以使用系统全局的sharedSession单例来满足大多数的需求

注:相比较NSURLConnection的返回处理,NSURLSession提供了灵活的数据返回方式,可以使用简单的block方式来处理返回数据,也可以使用更强大的delegate

NSURLSessionConfiguration

作用:用于定义和配置NSURLSession对象

每一个NSURLSession对象都可以设置不同的NSURLSessionConfiguration,从而满足应用内不同类型的网络请求

NSURLSessionConfiguration的三种类型:

(1)defaultSessionConfiguration默认session配置,类似NSURLConnection的标准配置,使用硬盘来存储缓存数据
(2)ephemeralSessionConfiguration临时session配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存在内存里,所以当程序退出时,所有的数据都会消失
(3)backgroundSessionConfiguration后台session配置,与默认配置类似,不同的是会在后台开启另一个线程来处理网络数据

NSURLSessionTask

NSURLSession使用NSURLSessionTask来具体执行网络请求的任务

NSURLSessionTask支持网络请求的取消、暂停和恢复,比如下载文件暂停之后再恢复就能够自动从上次的进度继续下载

NSURLSessionTask还能获取数据的读取进度

NSURLSessionTask的三种类型:

(1)NSURLSessionDataTask 处理一般的NSData数据对象,比如通过GET或POST方式从服务器获取JSON或XML返回等等,但不支持后台获取
(2)NSURLSessionUploadTask 用于上传文件,支持后台上传
(3)NSURLSessionDownloadTask 用于下载文件,支持后台下载

通过HTTP PUT方法实现文件上传的步骤

实例化NSMutableURLRequest并指定HTTPMethod为PUT

设置请求的授权

(1)授权字符串格式:用户名:口令
(2)授权模式:Basic base64编码的授权字符串
(3)为HTTPHeaderField的Authorization赋值

文件上传的请求部分

// 1. URLRequest

NSURL *url = [NSURL URLWithString:@"http://localhost/uploads/xxx.png"];

NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];

requestM.HTTPMethod = @"PUT";

// 设置用户授权

// 1> 授权字符串(用户名+密码)

NSString *authStr = @"admin:123456";

// 2> BASE 64编码

NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];

NSString *base64Str = [authData base64EncodedStringWithOptions:0];

NSString *auth = [NSString stringWithFormat:@"BASIC %@", base64Str];

[requestM setValue:auth forHTTPHeaderField:@"Authorization"];

Q & A

最新文章

  1. mysql开启远程访问权限
  2. php总结 --- 18. 七牛云存储
  3. 将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法
  4. soj4271 Love Me, Love My Permutation (DFS)
  5. Basic motion detection and tracking with Python and OpenCV
  6. nbIoT基础概念
  7. IOS中UISearchBar的使用
  8. 《Unix网络编程》卷2 读书笔记 第3章- System V IPC
  9. IOS NS 字符串 数组 字典 文件 动态 静态 操作
  10. 2014-2015 ACM-ICPC, Asia Xian Regional Contest G The Problem to Slow Down You 回文树
  11. Ansible5:常用模块【转】
  12. yaf学习之——生成yaf示例框架
  13. M4—按键识别
  14. SUSE-11 本地 zypper 配置
  15. Android最火热修复实战
  16. [Oracle11g] 通过伪列查询
  17. DJango 基础(7)
  18. ReactNative学习笔记(三)打包、调试、运行等相关介绍
  19. dp 入门
  20. 8.1 C++输入输出类的层次

热门文章

  1. 当鼠标聚焦时输入框变色(focus事件实例)
  2. PatentTips - Use of multiple virtual machine monitors to handle privileged events
  3. 洛谷 P1644 跳马问题
  4. [D3] Add label text
  5. 用多年前据说买买提上理论水平最高的帖子做镇楼贴---NASA有吹牛了
  6. 详解Spring Boot配置文件之多环境配置
  7. cocos2D(一)----第一个cocos2D程序
  8. mootools常用特性和示例(基础篇1)
  9. xxxyyy
  10. JSONModel