我是靠谱客的博主 虚拟芹菜,最近开发中收集的这篇文章主要介绍(有码)NSURLSession,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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的全部内容,希望文章能够帮你解决(有码)NSURLSession所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部