文档章节

iOS -- NSURLSession 实现断点下载

GLAlanTong
 GLAlanTong
发布于 2016/02/29 19:09
字数 604
阅读 44
收藏 1

iOS -- NSURLSession 实现断点下载

NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的。在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作。注意,如果用户强制将程序关闭,NSURLSession会断掉。

NSURLSession提供的功能:

1.通过URL将数据下载到内存

2.通过URL将数据下载到文件系统

3.将数据上传到指定URL

4.在后台完成上述功能


如果想更深入的了解NSURLSession  请点击 http://www.cocoachina.com/industry/20131106/7304.html


好啦!步入正题,断点下载的实现











控件已经拖好,并且关联了点击事件,下面就是代码部分了。

  1. 在viewController.m 文件中声明属性

@property (nonatomic,strong) NSURLSessionDownloadTask *task;


    2.创建一个任务配置对象

    在viewDidLoad 中写入一下代码

 NSURLSessionConfiguration *configer = [NSURLSessionConfiguration defaultSessionConfiguration];
    
 NSURLSession *session = [NSURLSession sessionWithConfiguration:configer delegate:self delegateQueue:[NSOperationQueue mainQueue]];
 //这里设置代理了,所以需要去遵守两个协议  NSURLSessionDataDelegate,NSURLSessionDelegate
    
    NSURL *url = [NSURL URLWithString:@"http://uploads.mp3songurls.com/2930.mp3"];
    
    //创建下载任务
    self.task = [session downloadTaskWithURL:url];


    3.下载过程中需要实现代理的方法

#pragma mark 每下载完一部分 就会调用该方法   
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    //文件以字节为单位
    //1.totalBytesExpectedToWrite 所需下载文件的总大小
    //2.totalBytesWritten 已经下载好部分的大小
    //3.bytesWritten 当前(本次)下载文件的大小
    self.progressView.progress = 1.0f * totalBytesWritten/totalBytesExpectedToWrite;
    NSLog(@"%.2f",self.progressView.progress);
    
}


    4.下载完成调用的方法

#pragma mark  下载完成的代理方法  
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{

    //打印一下沙盒地址,去沙盒里面查看下载好的文件
    NSLog(@"%@",NSHomeDirectory());
    
    //创建下载文件保存的路径,一般大文件都会保存在cache文件下
    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    cachePath = [cachePath stringByAppendingPathComponent:@"111.mp3"];
    NSFileManager *manager = [NSFileManager defaultManager];
    //将下载好的文件移动到cache文件夹下,因为下载的文件,默认是在tmp目录下,这个目录最大的特点就是,一段时间之后,系统将对该文件下的文件做一个清理的操作,这是自动执行的
    [manager moveItemAtPath:location.path toPath:cachePath error:nil];
    
}


    5.开始下载的方法

#pragma mark 开始下载
- (IBAction)startDownloadDidClickedAction:(id)sender {
    [self.task resume];
}

    

    6.暂停下载

    

#pragma mark 暂停下载  
- (IBAction)stopButtonDIdClickedAction:(id)sender {
    [self.task suspend];
}



    这只是做了个小小的介绍,希望对有需要的童鞋有帮助。。。。





























© 著作权归作者所有

共有 人打赏支持
上一篇: OC 内存管理
下一篇: iOS 多线程
GLAlanTong
粉丝 3
博文 21
码字总数 15640
作品 0
广州
程序员
私信 提问
iOS基础深入补完计划--NSURLSession使用详解(附Demo)

目录 前言 API Demo 前言 本文主要是把NSURLSession以及NSURLSessionTask相关的代理方法全部整理了一下。 旨在大体了解在一个iOS网络请求中、一个任务究竟经理了什么。 而我们、又能做些什么...

kirito_song
05/10
0
0
AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库

AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库,它建立在URL 装载系统框架的顶层,内置在Cocoa里,扩展了强有力的高级网络抽象。它的模块架构被良好的设计,拥有丰富的功能,...

lewis-180
2015/04/02
0
0
iOS源码补完计划--AFNetworking 3.1.0源码研读

参拜一下AFNetworking的源码。 第四篇源码、暂时来看也是iOS方向的最后一篇、撸完准备趁着热乎撸一撸网络协议。 目录 准备工作 功能模块 AFURLSessionManager/AFHTTPSessionManager AFNetwo...

kirito_song
05/25
0
0
AFNetworking 2.0 发布,iOS 网络框架

AFNetworking 是一款在 iOS 开发中广泛使用的网络框架,其刚刚发布最新的 2.0 版本,主要改进: 架构重构 支持 NSURLSession Serialization Modules Expanded UIKit Extensions Real-time f...

oschina
2013/09/28
9K
5
iOS源码补完计划--AFNetworking(一)

目录 前言 AFURLSessionManager AFHTTPSessionManager API注释Demo 参考 前言 AFNetworking第一篇 主要看了看AFURLSessionManager以及AFHTTPSessionManager相关的API AFN概述:《iOS源码补完计...

kirito_song
05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基于对象特征的推荐

(本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 在上一期基于协同过滤的的推荐场景中,我们介绍了如何通过PAI快速搭建一个基于协同过滤方案的推荐系统,这一节会介绍一些如何基...

阿里云官方博客
6分钟前
0
0
Ugly Number(leetcode263)

Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. Example 1: Input: 6Output: true......

woshixin
30分钟前
2
0
深度模型从研者 眼里的 似然估计 & Hessain 海森矩阵 & Fisher Information (费雪信息)

深度模型的训练的基本依据是最小化模型拟合数据的误差。旨在不仅知其然(如何构建和训练一个深度模型),还应知其所以然(为什么这样训练,可以做哪些优化)。我们就会发现,有很多研究者,在...

刘小米_思聪
34分钟前
0
0
【双十二】12 月 12 日 12 点 12 分限量抢福利,云计算不剁手!

活动详情 1.首充豪礼 双十二当日,新用户首充 200 元送 200 元代金券!仅限前 88 名!先到先得!拼手速!(新用户指 12 月 12 日前已完成注册但从未充值过的用户)
 2.超值返券 双十二当日,...

七牛云
今天
4
0
Calculate Linux 发布 18 LXQt是基于Gentoo的发行版

导读 Calculate Linux 是一个基于 Gentoo 并与 Gentoo 完全兼容的滚动更新发行版家族,专为企业环境下的快速部署而优化。其提供多个不同的分支版本,分别适用于桌面、服务器等应用场景。该项...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部