文档章节

iOS -- NSURLSession 实现断点下载

GLAlanTong
 GLAlanTong
发布于 2016/02/29 19:09
字数 604
阅读 43
收藏 1
点赞 1
评论 0

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];
}



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





























© 著作权归作者所有

共有 人打赏支持
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
iOS源码补完计划--AFNetworking(一)

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

kirito_song
05/15
0
0
面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课
04/26
0
0
Xamarin iOS教程之编辑界面编写代码

Xamarin iOS教程之编辑界面编写代码 Xamarin iOS的Interface Builder Interface Builder被称为编辑界面。它是一个虚拟的图形化设计工具,用来为iOS应用程序创建图形界面。单击MainStoryboar...

大学霸
2015/06/11
0
0
那些在学习iOS开发前就应该知道的事(part 2)

英文原文:Things I wish I had known before starting iOS development—Part 2 如果你还没读这篇文章的第一部分,请先读完了再来看第二部分。 那些在学习iOS开发前就应该知道的事(part 1)...

TomatosX
2015/06/12
0
0
Reveal4断点加载-官网拉下来的找起来方便

通过Xcode断点加载Reveal Server 下面描述的方法仅适用于在iOS或tvOS模拟器中运行的应用程序。 通过Xcode调试器断点加载Reveal Server框架是一种很好的方式,可以让您内省您正在处理的任何项...

iOS_windKing
昨天
0
0
iOS 多任务下载(支持离线)

iOS 多任务下载(支持离线) 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+] 添加下载任务 @param netPath 下载地址*/ (void)addDownloadTast:(NSString *)netPath { } ...

wakice
2017/03/30
0
0
iOS中的URLSession

URLSession NSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的. 当程序在前台时,NSURLSession和NSURLConnection大部分可以互相替代.NSURLSession支持后台网络操作,除非用户强行关...

傲风凌寒
2014/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
33分钟前
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部