iOS NSURLSession 详解

原创 2016年05月30日 15:18:34

一:NSURLSession

  • 类似之前的NSURLConnection, 可配置每个session的 cookie,证书等网络连接配置信息 

    NSURLSessionConfiguration

  • 包含三大任务 :NSURLSessionTask--(NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask)
  • 常用api

    

bubuko.com,布布扣
@interface NSURLSession : NSObject

// 单例
+ (NSURLSession *)sharedSession;

//配置 Session
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration;
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id <NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue;
bubuko.com,布布扣
bubuko.com,布布扣
/*Data 请求 request */
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request;

/* Data 请求 url. */
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url;

/* 上传文件请求 fileUrl */
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;

/* 上传Data请求 NSData */
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData;

/* 上传数据流请求 request */
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request;

/* 下载文件.request */
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;

/* 下载文件 url */
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url;

/* 断点下载请求 , */
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;
bubuko.com,布布扣

异步请求操作

bubuko.com,布布扣
@interface NSURLSession (NSURLSessionAsynchronousConvenience)
/* 异步数据请求 NSData */
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler;
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler;

/*
 * 异步文件上传请求 file,NSData
 */
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler;

/* 异步下载请求 */
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler;

@end
bubuko.com,布布扣

二:NSURLSessionTask 任务

  • 包含三大任务 :NSURLSessionTask--(NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask)
  • 关系图

    bubuko.com,布布扣

     系统定义的 常用api,如,对 网络任务的暂停,继续

bubuko.com,布布扣
@interface NSURLSessionTask : NSObject <NSCopying>
 
  ........

/* 取消任务*/
- (void)cancel;

/* 任务状态*/
@property (readonly) NSURLSessionTaskState state;

/*任务暂停和继续 */
- (void)suspend;
- (void)resume;
  ........
@end
bubuko.com,布布扣

 任务状态:

bubuko.com,布布扣
typedef NS_ENUM(NSInteger, NSURLSessionTaskState) {
    NSURLSessionTaskStateRunning = 0,                     /* The task is currently being serviced by the session */
    NSURLSessionTaskStateSuspended = 1,
    NSURLSessionTaskStateCanceling = 2,                   /* The task has been told to cancel.  The session will receive a URLSession:task:didCompleteWithError: message. */
    NSURLSessionTaskStateCompleted = 3,                   /* The task has completed and the session will receive no more delegate notifications */
} NS_ENUM_AVAILABLE(10_9, 7_0);
bubuko.com,布布扣

 三大子类,Data,Upload,Download操作 ,都是抽象类,基本不提供任何操作

bubuko.com,布布扣
@interface NSURLSessionDataTask : NSURLSessionTask
@end

/*
 * An NSURLSessionUploadTask does not currently provide any additional*/

@interface NSURLSessionUploadTask : NSURLSessionDataTask
@end


@interface NSURLSessionDownloadTask : NSURLSessionTask

/*断点续传  */
- (void)cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler;

@end
bubuko.com,布布扣

 

三:演示代码

1:异步的GET 请求 Data 数据

bubuko.com,布布扣
    NSURL *url = [NSURL URLWithString:@"http://httpbin.org/get"];
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        
    }];
    
    //任务创建后,不会立即执行,调用resume 立即执行;
    [dataTask resume];
bubuko.com,布布扣

2:异步 下载文件

bubuko.com,布布扣
    NSURL *url = [NSURL URLWithString:@"http://dl.360safe.com/360zip_setup_3.1.0.2061.exe"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDownloadTask *downTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
        
        //文件下载会被先写入到一个 临时路径 location,我们需要将下载的文件移动到我们需要地方保存
        NSURL *savePath = [NSURL fileURLWithPath:@"/Users/user/Desktop/360zip.exe"];
        [[NSFileManager defaultManager] moveItemAtURL:location toURL:savePath error:nil];
        
    }];
    
    [downTask resume];
bubuko.com,布布扣

3: 异步上传文件

bubuko.com,布布扣
 NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
 NSURLRequest *request = [NSURLRequest requestWithURL:URL];
 NSData *data = ...;

 NSURLSession *session = [NSURLSession sharedSession];
 NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
                                                            fromData:data
                                                   completionHandler:
     ^(NSData *data, NSURLResponse *response, NSError *error) {
         // ...
     }];

 [uploadTask resume];
版权声明:本文为博主原创文章,未经博主允许不得转载。

NSURLSession 学习笔记

http://www.bubuko.com/infodetail-164665.html NSURLSession 学习笔记 一:NSURLSession 类似之前的NSUR...
  • jeffasd
  • jeffasd
  • 2015年11月10日 18:55
  • 243

iOS NSURLSession

NSURLSession 学习笔记 一:NSURLSession 类似之前的NSURLConnection, 可配置每个session的 cookie,证书等网络连接配置信息  NSURLSess...
  • sevenquan
  • sevenquan
  • 2016年01月28日 15:51
  • 539

NSURLSession学习笔记(一)简介

NSURLSession是WWDC 2013推出的一个网络架构,该架构基于NSURLConnection重构,目的是取代NSURLConnection。本文对其概念、使用和相关类做一个简介。...
  • u010962810
  • u010962810
  • 2014年02月05日 13:27
  • 9390

系列:iOS开发-网络请求

我们的目标是开发应用,那么或多或少的我们就会有网络请求的需求,比如我们在开发的时候有用户登录,比如我们写一个音乐软件,我们要获取音乐列表,获取音乐来播放,再复杂点的,我们可能会写一个聊天类的软件,需要...
  • spicyShrimp
  • spicyShrimp
  • 2017年04月27日 09:42
  • 208

IOS网络开发NSURLSession详解(一)概述

原创blog,转载请注明出处blog.csdn.net/hello_hwc 我的IOS-SDK详解专栏,欢迎关注 http://blog.csdn.net/column/details/huang...
  • Hello_Hwc
  • Hello_Hwc
  • 2015年03月21日 10:03
  • 13800

【Objective-C】Http常用API、同步请求与异步请求 /NSURLSession学习笔记(二)Session Task

参考 (1)http://blog.csdn.net/rongxinhua/article/details/20079607?utm_source=tuicool&utm_medium=referr...
  • lvchaman
  • lvchaman
  • 2015年12月14日 16:36
  • 3109

NSURLSession学习笔记

NSURLSession学习笔记(一)简介  2014-07-26 00:05 30157人阅读 评论(3) 收藏 举报  分类: IOS(727)   Netwo...
  • wakice
  • wakice
  • 2017年03月19日 01:41
  • 81

NSURLSession学习笔记(一)简介

一、URL Session的基本概念 1.三种工作模式: 默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁盘缓存的持久化策略,使用用户ke...
  • chenyxh2005
  • chenyxh2005
  • 2014年12月28日 21:10
  • 186

iOS开发 ----- 网络请求5 ----- NSURLsession实现上传数据

NSURLSession上传数据前边写的是用AFNetWorking实现的上传,当时还比较懵逼,不知道自己怎么上传,今天又详细分析了一下,又扒了几篇博客,现在已经实现了自己上传,下边先说下原理1. 上...
  • xiao333ma
  • xiao333ma
  • 2015年09月28日 13:24
  • 1915

用NSUrlSession批量下载文件并保存文件的处理

现在我来介绍之前说过的用NSUrlSession批量下载的方法,用NSUrlSession下载文件,有两种方法,一是直接调用Block方法做下载后的处理,二是利用NSUrlSessionDelegat...
  • ZhongLv_HoneyMoon
  • ZhongLv_HoneyMoon
  • 2017年04月17日 16:26
  • 549
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS NSURLSession 详解
举报原因:
原因补充:

(最多只允许输入30个字)