(有码)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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值