NSURLSession

原创 2015年11月18日 20:41:15

NSURLSession

NSURLSessionTask : 任务的基类,包括

  1. NSURLSessionDataTask : 缓存到内存中的任务,一般是网络请求等不需要永久存储的
  2. NSURLSessionUploadTask : 上传数据的任务(属于Data层次)
  3. NSURLSessionDownloadTask : 下载数据到本地磁盘的任务

tableviewcell最外层一定是数组

下载任务(需要代理)

@property (weak, nonatomic) IBOutlet UIImageView *imageV;
@property (weak, nonatomic) IBOutlet UIProgressView *progressV;
@property (weak, nonatomic) IBOutlet UILabel *progressT;
@property (nonatomic,strong) NSData *resumeData;
@property (nonatomic,strong) NSURLSessionDownloadTask *resumeDLTask;
@property (nonatomic,strong) NSURLSession *session;

//当有数据的时候,继续原来的加载
    if (_resumeData) {
        _resumeDLTask = [_session downloadTaskWithResumeData:_resumeData];
    }else{//当没有数据的时候,重新开始加载
//获取一个url
    NSURL *imageUrl = [NSURL URLWithString:@"http://image.tianjimedia.com/uploadImages/2011/314/6328K77VW824.jpg"];
    //根据url创建一个GET请求
    NSURLRequest *request = [NSURLRequest requestWithURL:imageUrl];
    //用默认配置设置一个session对象
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]delegate:self delegateQueue:nil];
    //用session对象和GET请求创建一个DownLoadTask
    _resumeDLTask = [session downloadTaskWithRequest:request];
    }
    //启动下载任务
    [_resumeDLTask resume];
}  

- (IBAction)stopDownload:(UIButton *)sender {
    //暂停下载任务 方法:cancelByProducingResumeData,把下载的部分给 _resumeData 保存起来
    [_resumeDLTask cancelByProducingResumeData:^(NSData *resumeData) {
        _resumeData = resumeData;

        _resumeDLTask = nil;
    }];
}

//下载的过程中调用
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
     didWriteData:(int64_t)bytesWritten//每次写入的字节数
totalBytesWritten:(int64_t)totalBytesWritten//当前一共写入多少字节
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite//文件大小
{
    NSLog(@"loading....");
    double progress = totalBytesWritten / totalBytesExpectedToWrite;
    //更新进度.主线程
    dispatch_async(dispatch_get_main_queue(), ^{
        _progressV.progress = progress;
        _progressT.text = [NSString stringWithFormat:@"%.2f%%",progress * 100];
    });
}

//下载完成后调用
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    NSLog(@"fished....");
    NSLog(@"location >> %@",location);
    //创建文件管理器
    NSFileManager *fileManger = [NSFileManager defaultManager];
    //访问沙盒路径,只有这一种方法允许访问沙盒,第一个参数是要访问的字典对象,第二个参数是是NSSearchDomainMask枚举值
    NSURL *docUrl = [fileManger URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0];
    NSError *error;
    //每一个斜杠代表一个 Component ,用默认路径下的最后的一个Component 取出文件
    NSURL *saveUrl = [docUrl URLByAppendingPathComponent:[location lastPathComponent]];
    //先判断这个路径下有没有文件,如果有,先删除
    if ([fileManger fileExistsAtPath:[saveUrl path]]) {
        [fileManger removeItemAtURL:saveUrl error:&error];
        if (error) {
            NSLog(@"error");
            return;
        }
    }
    //从临时目录中把文件移到docments文件夹
    if ([fileManger moveItemAtURL:location toURL:saveUrl error:&error]) {
        if (error) {
            NSLog(@"error >> %@",error);
            return;
        }
    //绘制界面是主线程做的
    dispatch_async(dispatch_get_main_queue(), ^{
            _progressV.progress = 1;
            _imageV.image = [UIImage imageWithContentsOfFile:[saveUrl path]];
        });
    }
}

配置文件的三种模式:

  1. default:默认模式
  2. 瞬时模式,把请求到的数据放到内存中
  3. 后台模式:大型的游戏

NSURLConnection(9.0之后不能用,不推荐使用)

版权声明:本文为博主原创文章,未经博主允许不得转载。

NSURLSession简介与入门

NSURLSession 也不是什么新鲜话题了,但之前一直只是简单的使用却没有总结过其用法及注意事项,现在就整理一下关于NSRULSession的相关知识。基本组成       使用需要配合三个基本的...
  • u013378438
  • u013378438
  • 2016年06月19日 21:58
  • 1033

【Objective-C】Http常用API、同步请求与异步请求 /NSURLSession学习笔记(二)Session Task

参考 (1)http://blog.csdn.net/rongxinhua/article/details/20079607?utm_source=tuicool&utm_medium=referr...
  • lvchaman
  • lvchaman
  • 2015年12月14日 16:36
  • 3115

IOS网络开发NSURLSession详解(一)概述

原创blog,转载请注明出处blog.csdn.net/hello_hwc 我的IOS-SDK详解专栏,欢迎关注 http://blog.csdn.net/column/details/huang...
  • Hello_Hwc
  • Hello_Hwc
  • 2015年03月21日 10:03
  • 13805

网络-NSURLSession应用和原理

网络-NSURLSession1. 简介NSRULConnection使用runloop来达到异步下载的,原理:Runloop保证重要的任务流畅执行; 分配固定时隙,实现单一线程异步; c...
  • CSDNhaoren13
  • CSDNhaoren13
  • 2016年03月05日 16:32
  • 1477

ios NSURLSession 来请求图片和json数据

先上图: 以下的两个demo都用到了我基于NSURLSession来封装的一个网络请求的block(后面附录TFNetWorkManager源码) 一. 利用NSURLSession来增量下载...
  • robinson_911
  • robinson_911
  • 2016年09月16日 12:29
  • 582

NSURLSession的介绍和说明

相关组件 NSURLSessionNSURLSessionConfigurationNSURLSessionDataTaskNSURLSessionUploadTaskNSURLSessionD...
  • bravegogo
  • bravegogo
  • 2016年04月30日 16:55
  • 718

通过nsurlsession向服务器传送json数据

近几天真是被json搞死了 终于知道该怎么用json向服务器传输json了 直接贴代码吧 //多样性的request let request = NSMutableURLR...
  • qq_31214097
  • qq_31214097
  • 2015年12月26日 20:19
  • 1061

利用NSURLSession实现https请求

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view...
  • PZ0605
  • PZ0605
  • 2016年07月19日 19:32
  • 6355

使用NSURLSession发送get和post请求

在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作。 简单说明   NSURLSessio...
  • hurosezhang
  • hurosezhang
  • 2016年08月30日 13:41
  • 1550

用NSUrlSession批量下载文件并保存文件的处理

现在我来介绍之前说过的用NSUrlSession批量下载的方法,用NSUrlSession下载文件,有两种方法,一是直接调用Block方法做下载后的处理,二是利用NSUrlSessionDelegat...
  • ZhongLv_HoneyMoon
  • ZhongLv_HoneyMoon
  • 2017年04月17日 16:26
  • 552
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSURLSession
举报原因:
原因补充:

(最多只允许输入30个字)