NSURLSession下载,默认将下载的任务保存在tmp下,如果回调方法什么都没做,tmp文件会自动删除

基础: 使用单例session

NSURL *url = [NSURL URLWithString:@"urlstring"];

//创建session
    NSURLSession *session = [NSURLSession sharedSession];
    //创建任务( 在子线程下载)
    NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        //更新UI
        dispatch_async(dispatch_get_main_queue(), ^{
            
            NSLog(@"数据请求完成更新UI");
        });

}];

//默认不工作,要手动开启

[task resume];

代理:实现文件下载,不使用session,使用config

NSURL *url = [NSURL URLWithString:@"urlstring"];
    
    //config可以配置全局的网络访问的参数
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    //创建session(指定回调方法的线程)不使用单例是防止多个程序都用那个单例session
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    //发起并且继续任务
    [[session downloadTaskWithURL:url] resume];

断点续传:

//开始下载

- (IBAction)start:(id)sender {
    NSString *strUrl = @"http://www.33.la/uploads/20130523tpxh/6580.jpg";
    NSURL *url = [NSURL URLWithString:strUrl];
    self.downloadTask = [self.session downloadTaskWithURL:url];
    [self.downloadTask resume];
}

- (IBAction)pause:(id)sender {
    //暂停下载
    [self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {
        NSLog(@"%@暂停%tu",[NSThread currentThread],resumeData.length);
        //保存下载数据
        self.resumeData = resumeData;
        self.downloadTask = nil;
    }];
}

- (IBAction)continueDownload:(id)sender {
    
    //防止多次点击
    if (self.resumeData == nil) {
        NSLog(@"没有续传的任务");
        return;
    }
    //创建下载任务,使用上次下载的数据
    self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];
    //开始任务
    [self.downloadTask resume];
    
    NSLog(@"+++++");
}

#pragma mark----代理方法
//下载完成
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    
    //下载完成,取消会话防止强引用
    [self.session invalidateAndCancel];
    self.session = nil;
    
    self.downloadTask = nil;
}

//下载中...
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
}
//断点续传的时候用
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{
}

- (void)viewWillDisappear:(BOOL)animated{
    //下载完成,取消会话防止强引用
    [self.session invalidateAndCancel];
    self.session = nil;
}

(有码)NSURLSession相关推荐

  1. (0044) iOS 开发之SDWebImage 深度学习其源码和原理

    闲着没事看了SDWebImage的源码.清晰了它的原理. SDWebImage 深度学习 1.它是iOS图片加载框架 它支持从网络中下载且缓存图片,并设置图片到对应的UIImageView控件或者UI ...

  2. NSURLSession使用说明及后台工作流程分析

    NSURLSession简介 NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnect ...

  3. iOS 仿看了吗应用、指南针测网速等常用工具、自定义弹出视图框架、图片裁剪、内容扩展等源码...

    iOS精选源码 扩展内容的cell - folding-cell 一个近乎完整的可识别中国身份证信息的Demo 可自动快速... JPImageresizerView 仿微信的图片裁剪 带年月和至今以 ...

  4. IOS开发基础之NSURLSession的使用

    IOS开发基础之NSURLSession的使用 服务器我们选用的是tomcat服务器. 所有项目info.plist加入 <key>NSAppTransportSecurity</k ...

  5. NSURLProtocol 拦截 NSURLSession 请求时body丢失问题解决方案探讨

    摘要: "IP直连方案"主要在于解决DNS污染.省去DNS解析时间,通常情况下我们可以在项目中使用 NSURLProtocol 拦截 NSURLSession 请求,下面将支持 P ...

  6. AFNetworking源码学习

    AFNetworking源码学习 简介 AFNetWorking是使用Objective-c开发iOS程序主流的网络请求开源库. AFNetworking组织结构 AFNetWorking主要分为5个 ...

  7. 阿里百川码力APP监控 来了!

    阿里百川码力APP监控 来了! 这个APP监控 和手淘一起成长 历经千锤百炼 走过千BUG万坑 如今百川起产品 为了让你的APP更好 用户更爽! 在移动互联网时代,一款应用是否成功,用户体验是一个关键 ...

  8. iOS AFNetWorking源码详解(一)

    来源:Yuzeyang 链接:http://zeeyang.com/2016/02/21/AFNetWorking-one/ 首先来介绍下AFNetWorking,官方介绍如下: AFNetworki ...

  9. iOS7 - NSURLSession

    为什么80%的码农都做不了架构师?>>>    在iOS 7之前使用的网络服务是通过使用NSURLConnection中的全局状态来管理Cookie和身份验证,因此可能导致两个不同的 ...

最新文章

  1. HTML/CSS进阶
  2. Console.log对象显示
  3. Fatal error: Class 'ZipArchive' not found的解决办法
  4. (转)json+flexgrid+jbox组合运用页面刷新jsp
  5. 机器学习基础(二十九)—— 径向基核函数(RBF)
  6. 大数据可视化该如何实现
  7. [转] 雅虎团队:网站性能优化的35条黄金守则
  8. Java中的【锁】事 - 极客大学架构师训练营 架构师 Albert 分享
  9. java电子书下载网站
  10. informix php,连接到informix数据库 - PHP 方式
  11. ER Studio 直接导出sql建表
  12. 生物信息学:根据PDB名称、爬虫PDB数据库的信息、保存到Excel里
  13. 更改element-ui中MessageBox弹框的确定和取消位置
  14. 上传文件的几种主要方法。
  15. Android studio三周学习总结
  16. Linux系统查看有几块硬盘
  17. java中lock底层实现_Synchronized与Lock的底层实现解析
  18. 2021年茶艺师(中级)考试题及茶艺师(中级)模拟考试
  19. 如何把wma转换成mp3格式?三种方式任你使用
  20. 程序员为什么会越来越觉得前途很迷茫

热门文章

  1. 十分钟了解“微服务”
  2. 蝉妈妈发布孙一宁抖音直播数据:“想你的夜”涨粉200万
  3. C++接入CrashRpt并上报分析崩溃信息
  4. 2021年考思科认证CCIE还有必要吗
  5. html+css基础仏学习教程之HTML 中播放声音或者视频的方法有很多种。
  6. 计算机无法发现网络共享打印机,打印机网络共享,但是局域网内电脑无法连接。...
  7. 基于OpenAS2 V2.3.0的使用心得 二 之配置
  8. 验证码登录实战,http cookie,css-selector,runjs例子
  9. Java模拟新浪和腾迅自动登录并发送微博(2013年3月更新可用)
  10. 人工智能技术在智能音箱中的应用:智能语音识别与智能交互