iOS_使用NSURLSessionDataDelegate的代理方法下载数据

本文详细介绍了如何使用NSURLSessionDataDelegate在iOS中实现数据下载,包括正常的数据任务下载、将data任务转换为download任务以完成下载,以及如何取消data任务下载。通过具体的代码示例展示了每个步骤,并提到了相关的核心API和代理方法。
摘要由CSDN通过智能技术生成
  • 说明:

    • 本文将介绍NSURLSessionDataDelegate, 使用NSURLSessionDataDelegate方法实现下载数据. 博文底部会对文中所使用的方法有详细的介绍, 如果感兴趣可以仔细阅读.

    • session 类型 : default session.

    • session的创建方法: + sessionWithConfiguration:delegate:delegateQueue:

    • task 类型: data task.

    • 代码中所使用到的接口(例: http://c.3g.163.com/photo/api/list/0096/4GJ60096.json) 都具有时效性, 建议测试时使用一个可以提供数据的新接口.

  • 文章中尽量不使用或少使用封装, 目的是让大家清楚为了实现功能所需要的官方核心API是哪些(如果使用封装, 会在封装外面加以注释)

  • 此文章由 @春雨 编写. 经 @Scott,@黑子 审核. 若转载此文章,请注明出处和作者

iOS_NSURLSessionDataDelegate

核心API

Class :

  • NSURLSession
  • NSURLSessionConfiguration
  • NSURLSessionTask
    • NSURLSessionDataTask
    • NSURLSessionDownload

Delegate :

  • NSURLSessionDelegate
  • NSURLSessionTaskDelegate
  • NSURLSessionDataDelegate
  • NSURLSessionDownloadDelegate

涉及的API :

  • NSURLSession
/** 创建NSURLSession对象的类方法. */
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id<NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue

/** 通过URL, 返回一个数据任务. */
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url

/** 通过request请求, 返回一个数据任务. */
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request
  • NSURLSessionDataDelegate

/**  告诉delegate已经接受到服务器的初始应答, 准备接下来的数据任务的操作. */
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler

/** 告诉delegate已经接收到部分数据. */
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data


/** 告诉delegate, data task 已经转变成download task. */
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask
  • NSURLSessionTaskDelegate
/** 告诉delegate, task已经完成. */
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
  • NSURLSessionDownloadDelegate
/** 告诉delegate, download task已经完成. */
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location

功能实现

思路 :
  1. 正常实现data任务的下载.
  2. data任务转成download任务, 完成下载.
  3. 取消data任务下载.
Code :
一. 正常实现data任务的下载.

步骤1 :

/** 签订代理. */
@interface ViewController ()<NSURLSessionDelegate,  NSURLSessionDataDelegate, NSURLSessionDownloadDelegate>

/** 设置一个NSMutableData类型的对象, 用于接收返回的数据. */
@property (nonatomic, retain) NSMutableData *allData;

@end

步骤3 : 创建会话和任务

- (void)handleData /*-> 自己定义的一个方法. */
{

     /** 1. 创建NSURLSessionConfiguration类的对象, 这个对象被用于创建NSURLSession类的对象. */     
     NSURLSessionConfiguration *configura = [NSURLSessionConfiguration defaultSessionConfiguration];

    /**
     * 2. 创建NSURLSession的对象.
     * 参数一 : NSURLSessionConfiguration类的对象.(第1步创建的对象.)
     * 参数二 : session的代理人. 如果为nil, 系统将会提供一个代理人.
     * 参数三 : 一个队列, 代理方法在这个队列中执行. 如果为nil, 系统会自动创建一系列的队列.
     * 注: 只能通过这个方法给session设置代理人, 因为在NSURLSession中delegate属性是只读的.
     */

    NSURLSession *session = [NSURLSession sessionWithConfiguration:configura delegate:self delegateQueue:nil];

    /** 3. 创建URL. */
    NSURL *url = [NSURL URLWithString:@
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值