文档章节

iOS -- NSURLSession 实现断点下载

GLAlanTong
 GLAlanTong
发布于 2016/02/29 19:09
字数 604
阅读 43
收藏 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];
}



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





























© 著作权归作者所有

共有 人打赏支持
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

没有更多内容

加载失败,请刷新页面

加载更多

Bash各类扩展详解

Bash各类扩展详解 Bash中主要包括大括号扩展、波浪号扩展、变量扩展、子命令扩展、文件名扩展和算数扩展。这些扩展组合在一起为Bash带来了极大的易用性。掌握这些扩展的用法和功能,能够为B...

小陶小陶
46分钟前
1
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
5
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
3
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部