//
//  ViewController.m
//  下载进度
//
//  Created by Super on 14/7/4.
//  Copyright (c) 2014年 iOS. All rights reserved.
//

#import "ViewController.h"

@interface ViewController () <NSURLSessionDownloadDelegate>
@property (nonatomic, strong) NSURLSession *session;

@property (nonatomic, strong) NSURLSessionDownloadTask *downloadTask;

@property (nonatomic, strong) NSData *data;

@property (weak, nonatomic) IBOutlet UIProgressView *processView;
@end
@implementation ViewController

- (NSURLSession *)session{
    if (_session == nil) {
        //代理方法运行的队列
        NSOperationQueue *queue =  [NSOperationQueue mainQueue];
//        //最大的并发线程数  ???????
        //在NSURLSession中使用NSOperationQueue设置最大并发数,无效
//        queue.maxConcurrentOperationCount = 1;
       
       
        NSURLSessionConfiguration *conf = [NSURLSessionConfiguration defaultSessionConfiguration];
        //创建自定义session  设置代理
        //session  会话
        _session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:queue];
    }
    return _session;
}

//开始下载
- (IBAction)start:(id)sender {
    [self download];
}

//暂停pause 下载
- (IBAction)pause:(id)sender {
   
//    [self.downloadTask cancel];
   
    NSLog(@"zan ting");
    //取消下载,并且存储当前下载的数据
    [self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {
        self.data = resumeData;
    }];
    //如果点击多次暂停 会出问题  无法继续(因为 点击多次暂停的话 resumeData 为空)
    self.downloadTask = nil;
  
}
//继续下载
- (IBAction)resume:(id)sender {
    if (self.data == nil) {
        NSLog(@"没有要继续的数据");
        return;
    }
   
    [[self.session downloadTaskWithResumeData:self.data] resume];
   
    self.data = nil;
}
- (void)download{
//    NSString *strUrl = @"http://127.0.0.1/A02-head.mp4";
    NSString *strUrl = @"http://dlsw.baidu.com/sw-search-sp/soft/9d/25765/sogou_mac_31.1421982306.dmg";
    strUrl = [strUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:strUrl];
    //使用代理的话,不能用此方法 
//    [[self.session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
//        NSLog(@"---%@",[NSThread currentThread]);
//    }] resume];
   
    //执行代理方法
    self.downloadTask = [self.session downloadTaskWithURL:url];
    [self.downloadTask resume];
//     [[self.session downloadTaskWithURL:url] resume];
}

//代理的方法

 
//下载完成  —————>>>  didFinishDownloadingToURL
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    NSLog(@"over");
}
//断点续传    ————>>>  didResumeAtOffset
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{
    NSLog(@"==");
}
//进度
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    NSLog(@"---%@",[NSThread currentThread]);

//    [NSThread sleepForTimeInterval:0.1];
    //bytesWritten 本次下载了多少
    //totalBytesWritten  总共下载了多少
    //totalBytesExpectedToWrite  文件的大小
    float process = totalBytesWritten * 1.0 / totalBytesExpectedToWrite;
    NSLog(@"%f", process);
    self.processView.progress = process;
   
}

 
@end

supersr--NSURLSessionConfiguration-下载进度的更多相关文章

  1. 使用NSURLSessionDownloadTask实现大文件下载-监听下载进度

    - 5.1 涉及知识点(1)创建NSURLSession并设置代理,通过NSURLSessionDownloadTask并以代理的方式来完成大文件的下载 //1.创建NSURLSession,设置代理 ...

  2. iOS空心圆下载进度指示器控件

    self.layer = [CAShapeLayer layer]; self.layer.frame = CGRectMake(, , , ); self.layer.position = self ...

  3. IOS下载查看PDF文件(有下载进度)

    IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...

  4. 使用AsyncTask实现文件下载并且在状态中显示下载进度

    2013年10月24日 上班的第二天 昨天我是用afinal完成的则个功能,但是公司里并不希望使用第三方的代码,所以要求我在不使用第三方开源项目的情况下实现. 最先我是使用Thread开启一个子线程, ...

  5. iOS异步下载下载进度条显示

    说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLRequest  委托是 NSURLConnectionDo ...

  6. iOSQuartz2D-02-绘制炫酷的下载进度条

    效果图 实现思路 要实现绘图,通常需要自定义一个UIView的子类,重写父类的- (void)drawRect:(CGRect)rect方法,在该方法中实现绘图操作 若想显示下载进度,只需要实例化自定 ...

  7. PHP持续保有长连接,利用flush持续更新浏览器UI,下载进度条实现

    如何用PHP+JS实现上传进度条,大部分的人可能都实现过,但是下载呢?如何呢?原理也是差不多的,就是分次读写,每次读多少字节,但是这样的不好就是长连接,一般实现下载进度条常用的两种解决方案是:一种是需 ...

  8. OC - 9.使用Quartz2D绘制下载进度条

    效果图 实现思路 要实现绘图,通常需要自定义一个UIView的子类,重写父类的- (void)drawRect:(CGRect)rect方法,在该方法中实现绘图操作 若想显示下载进度,只需要实例化自定 ...

  9. ios专题 - 异步下载加下载进度显示

    [罗国强原创] 今天被刺激了,愤概地要写下这边博文. 说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLReq ...

  10. 用 CALayer 定制下载进度条控件

    // // RPProgressView.h // CALayer定制下载进度条控件 // // Created by RinpeChen on 16/1/2. // Copyright © 2016 ...

随机推荐

  1. JAVA 笔记

    一.Java基础以及面向对象编程1.float类型的数自动转换成double类型时,可能会出现前后不相等的情况,因为有些数不能够用有限的二进制位精确表示.2.右移>>右移,左边空出位以符号 ...

  2. tcp三次握手与四次挥手

  3. sql存储过程几个简单例子

    导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...

  4. centos7 静态ip设置

    TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV ...

  5. HDU 1532 最大流模板题

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1532 最近在学网络流,学的还不好,先不写理解了,先放模板... 我觉得写得不错的博客:http://blo ...

  6. iOS开发网络篇—大文件的多线程断点下载

    http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...

  7. Android学习笔记(十八)——再谈升级数据库

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 之前我们为了保证数据库中的表是最新的,只是简单地在 onUpgrade()方法中删除掉了当前所有的表,然后强制 ...

  8. [BZOJ1503][NOI2004]郁闷的出纳员

    [BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...

  9. 在Fedora 20 上安装Mysql并初始化root密码

    [root@localhost ~]# yum -y install community-mysql-server #安装数据库 已加载插件:langpacks, refresh-packagekit ...

  10. jQuery操作checkbox实例

    示意图 <script type="text/javascript"> $(function () { $("#ddlNumber").change ...