(有码)NSURLSession

来源:互联网 发布:如何找猎头知乎 编辑:程序博客网 时间:2024/06/05 20:18

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;
}

0 0
原创粉丝点击