NSURLSession下载,默认将下载的任务保存在tmp下,如果回调方法什么都没做,tmp文件会自动删除
基础: 使用单例session
NSURL *url = [NSURL URLWithString:@"urlstring"];
//创建sessionNSURLSession *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;
}