NSURLSession的介绍与基本用法
2015-10-30 22:48
302 查看
对比
NSURLConnection中的存在很多问题,例如:
NSURLConnection是IOS2.0推出的古老而又经典的网络解决方案。
复杂的网络请求需要使用代理进行实现。
代理方式默认在主线程工作。
只提供了start&cancel方法,不能暂停。
在使用多线程时需要使用运行循环。
-------------------------------------------
NSURLSession是IOS7中新的网络接口,,与NSURLConnection是并列的。
当程序在前台时,NSURLSession与NSURLConnection大部分可以互相替代。
NSURLSession支持后台网络操作,除非用户强行关闭。
NSURLSession提供的功能:
通过URL将数据下载到内存。
通过URL将数据下载的到文件系统。
将数据上传到指定URL。
在后台完成上述功能。
对于小型数据,例如用户登录、下载小图像、JSON&XML仍然使用NSURLConnection的异步或者同步方法即可。
另外,我们不用再考虑NSURLSession的线程问题,因为苹果已经为我们做好了。
新建工程,代码如下:
NSURLConnection中的存在很多问题,例如:
NSURLConnection是IOS2.0推出的古老而又经典的网络解决方案。
复杂的网络请求需要使用代理进行实现。
代理方式默认在主线程工作。
只提供了start&cancel方法,不能暂停。
在使用多线程时需要使用运行循环。
-------------------------------------------
NSURLSession是IOS7中新的网络接口,,与NSURLConnection是并列的。
当程序在前台时,NSURLSession与NSURLConnection大部分可以互相替代。
NSURLSession支持后台网络操作,除非用户强行关闭。
NSURLSession提供的功能:
通过URL将数据下载到内存。
通过URL将数据下载的到文件系统。
将数据上传到指定URL。
在后台完成上述功能。
对于小型数据,例如用户登录、下载小图像、JSON&XML仍然使用NSURLConnection的异步或者同步方法即可。
另外,我们不用再考虑NSURLSession的线程问题,因为苹果已经为我们做好了。
新建工程,代码如下:
// // ViewController.m // NSURLSession的基本使用 // // Created by apple on 15/10/30. // Copyright (c) 2015年 LiuXun. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController /** 使用NSURLSession肯定是异步,在子线程做耗时操作 我们只需要创建一个Session,发起一个任务,让任务resume就OK了 */ - (void)viewDidLoad { [super viewDidLoad]; // 1. url NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/videos.json"]; // 3. 由Session发起任务——异步操作 [[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // 反序列化 id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; NSLog(@"%@", result); // 在主线程更新UI dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"更新UI"); }); }] resume]; NSLog(@"XXXXXX"); } -(void)test1 { // 1. url NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/videos.json"]; // 2. 创建一个会话Session // 苹果直接提供了一个全局的Session(单例) NSURLSession *session = [NSURLSession sharedSession]; // 3. 由Session发起任务 NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // 反序列化 id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; NSLog(@"%@", result); }]; // 需要把任务开启。任务默认都是挂起的。 [task resume]; } @end运行结果如下:
相关文章推荐
- 浅谈Linux文件压缩、解压及归档
- 编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
- Java基础之组成概念图
- 快乐数
- php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
- Boost type_index库的实现细节
- UINavigationController导航视图器
- 安装vmware-vsphere-replication
- Android推送方案分析(MQTT/XMPP/GCM)
- 在windows上安装Jflex
- 安全参透之旅第2章 FOCA网站元数据侦查工具
- 容器
- 工作日志
- 【线性代数公开课MIT Linear Algebra】 第十四课 正交,再次回到Ax=b
- 淘宝SOA框架dubbo学习(2)--本地伪集群测试Demo
- docker distribution目录结构
- [转]php 解决json_encode中文UNICODE转码问题
- 如何 在 .net 下使用 zint 生成条形码
- 关系型数据库常用基础概念知识精简归纳
- cocos2d-x平台审核中遇到的openssl问题解决方案