• NSURLConnection与NSURLSession的区别


    NSURLConnection在ios9.0之后被废弃,现在使用NSURLSession,两者相比,NSURLSession在以下几方面做了改进:

    1. 根据每个Session做配置(http header,Cache,Cookie,protocal,Credential),不再在整个App层面共享配置.
    2. 支持网络操作的取消和断点续传
    3. 丰富的Delegate模型
    4. 后台处理上传和下载,即使你点击了“Home”按钮,后台仍然可以继续下载,并且提供了根据网络状况,电力情况进行处理的配置。

    下面有一个断点续传的功能:

    开始下载:

    - (IBAction)startButton:(id)sender {
        
        //创建请求
           //创建会话
        //创建下载任务(初始下载)
        self.task = [[self session] downloadTaskWithRequest:[self request]];
        [self.task resume];
        
        
    }

    暂停下载:

     if (self.task) {
            //判断是否已经开始任务
           
            [self.task cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
                self.partialData = resumeData;
                self.task = nil;
            }];
        }

    继续下载:

      //当已经暂停下载的时候,点击恢复,开始下载
       //是否已经开始下载任务,如果开始的话 如果初始下载
        if (self.task) {
            NSLog(@"正在进行任务下载");
        }else{
        
        
            //之前已经开始下载
            if (self.partialData) {
                self.task = [[self session] downloadTaskWithResumeData:self.partialData];
            }else{
            //之前还没有下载任务
                self.task = [[self session] downloadTaskWithRequest:[self request]];
            
            }
            
            [self.task resume];
        
        }

    下载的代理方法:

    //正在下载

    //正在下载
    -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
       
        //下载代理方法里任务自动开辟子线程
        NSLog(@"%@",[NSThread currentThread]);
       //刷新进度条
        dispatch_async(dispatch_get_main_queue(), ^{
            self.progress.progress = totalBytesWritten *1.0/totalBytesExpectedToWrite;
        });
      
    
    }

    //下载完成

    //下载完成
    -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    
        //下载成功后,将下载内容从临时文件转到别的文件
        //目的文件
        NSFileManager *manager = [NSFileManager defaultManager];
        NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        path = [path stringByAppendingPathComponent:[location lastPathComponent]];
        NSURL *destination = [NSURL fileURLWithPath:path];
        //转移
      BOOL success =  [manager moveItemAtURL:location toURL:destination error:nil];
        
        //转移成功之后
        if (success) {
            dispatch_async(dispatch_get_main_queue(), ^{
                UIImage *image = [UIImage imageWithContentsOfFile:path];
                self.imageView.image = image;
                
            });
        }
        
        self.task = nil;
    
    }

    思想:每个下载任务对应NSURLSession,可以将每个下载任务封装到一个任务模块中。

  • 相关阅读:
    pycharm中快捷键的使用
    Python中用format函数格式化字符串的用法
    Python eval()函数的用法
    python中的字符数字之间的转换函数
    python_控制台输出带颜色的文字方法
    Alpha通道是什么意思,和rgb通道有什么区别
    转载-【深度学习】深入理解Batch Normalization批标准化
    深度卷积网络-Inception系列
    微调Inception V3网络-对Satellite分类
    h5模型文件转换成pb模型文件
  • 原文地址:https://www.cnblogs.com/xiangrikui/p/5267406.html
Copyright © 2020-2023  润新知