NSURLSession

原创 2015年11月18日 20:41:15

NSURLSession

NSURLSessionTask : 任务的基类,包括

  1. NSURLSessionDataTask : 缓存到内存中的任务,一般是网络请求等不需要永久存储的
  2. NSURLSessionUploadTask : 上传数据的任务(属于Data层次)
  3. NSURLSessionDownloadTask : 下载数据到本地磁盘的任务

tableviewcell最外层一定是数组

下载任务(需要代理)

@property (weak, nonatomic) IBOutlet UIImageView *imageV;
@property (weak, nonatomic) IBOutlet UIProgressView *progressV;
@property (weak, nonatomic) IBOutlet UILabel *progressT;
@property (nonatomic,strong) NSData *resumeData;
@property (nonatomic,strong) NSURLSessionDownloadTask *resumeDLTask;
@property (nonatomic,strong) NSURLSession *session;

//当有数据的时候,继续原来的加载
    if (_resumeData) {
        _resumeDLTask = [_session downloadTaskWithResumeData:_resumeData];
    }else{//当没有数据的时候,重新开始加载
//获取一个url
    NSURL *imageUrl = [NSURL URLWithString:@"http://image.tianjimedia.com/uploadImages/2011/314/6328K77VW824.jpg"];
    //根据url创建一个GET请求
    NSURLRequest *request = [NSURLRequest requestWithURL:imageUrl];
    //用默认配置设置一个session对象
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]delegate:self delegateQueue:nil];
    //用session对象和GET请求创建一个DownLoadTask
    _resumeDLTask = [session downloadTaskWithRequest:request];
    }
    //启动下载任务
    [_resumeDLTask resume];
}  

- (IBAction)stopDownload:(UIButton *)sender {
    //暂停下载任务 方法:cancelByProducingResumeData,把下载的部分给 _resumeData 保存起来
    [_resumeDLTask cancelByProducingResumeData:^(NSData *resumeData) {
        _resumeData = resumeData;

        _resumeDLTask = nil;
    }];
}

//下载的过程中调用
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
     didWriteData:(int64_t)bytesWritten//每次写入的字节数
totalBytesWritten:(int64_t)totalBytesWritten//当前一共写入多少字节
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite//文件大小
{
    NSLog(@"loading....");
    double progress = totalBytesWritten / totalBytesExpectedToWrite;
    //更新进度.主线程
    dispatch_async(dispatch_get_main_queue(), ^{
        _progressV.progress = progress;
        _progressT.text = [NSString stringWithFormat:@"%.2f%%",progress * 100];
    });
}

//下载完成后调用
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    NSLog(@"fished....");
    NSLog(@"location >> %@",location);
    //创建文件管理器
    NSFileManager *fileManger = [NSFileManager defaultManager];
    //访问沙盒路径,只有这一种方法允许访问沙盒,第一个参数是要访问的字典对象,第二个参数是是NSSearchDomainMask枚举值
    NSURL *docUrl = [fileManger URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0];
    NSError *error;
    //每一个斜杠代表一个 Component ,用默认路径下的最后的一个Component 取出文件
    NSURL *saveUrl = [docUrl URLByAppendingPathComponent:[location lastPathComponent]];
    //先判断这个路径下有没有文件,如果有,先删除
    if ([fileManger fileExistsAtPath:[saveUrl path]]) {
        [fileManger removeItemAtURL:saveUrl error:&error];
        if (error) {
            NSLog(@"error");
            return;
        }
    }
    //从临时目录中把文件移到docments文件夹
    if ([fileManger moveItemAtURL:location toURL:saveUrl error:&error]) {
        if (error) {
            NSLog(@"error >> %@",error);
            return;
        }
    //绘制界面是主线程做的
    dispatch_async(dispatch_get_main_queue(), ^{
            _progressV.progress = 1;
            _imageV.image = [UIImage imageWithContentsOfFile:[saveUrl path]];
        });
    }
}

配置文件的三种模式:

  1. default:默认模式
  2. 瞬时模式,把请求到的数据放到内存中
  3. 后台模式:大型的游戏

NSURLConnection(9.0之后不能用,不推荐使用)

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

NSURLSession Apple官方文档

使用NSURLSession NSURLSession类和相关的类提供了通过http协议下载内容的应用程序接口,这些接口提供了丰富的代理方法,当你的应用没有运行或者被挂起的时候,这些代理方法...

iOS 7系列译文:忘记NSURLConnection,拥抱NSURLSession吧!

说到 iOS 7 和 Mac OS X 10.9 Mavericks 的显著变化,其中一个就是Foundation框架中URL加载系统的优化。   此时可能有人正沉浸在Apple的网络基础架构,...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

NSSession 的使用 (苹果建议使用)

详细代码下载连接:http://download.csdn.net/detail/liuchang_flu/9360443 ios7以后,开发中下载多数情况多数使用的这个, 因为使用NSConn...

NSURLSession

NSURLConnection问题:  1. 做复杂的网络操作,需要使用代理来实现。 比如下载大文件  2. 默认下载任务在主线程工作。  3. 默认这个任务的代理也是在主...

NSURLSession的简单使用

在iOS7中,苹果介绍了新的API —— NSURLSession,这一系列的API是用来替代NSURLConnection的。  NSURLSession带来了这些新的好处: 后台上传和下载...

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求   2)本文将不再讲解NSURLConnection的使用,如有需要了解NSURLConnection如何发送请求。 ...

OC之NSURLSession的用法一

NSURLSession是iOS7中新的网络接口,它与的NSURLConnection是并列的。在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作。如果用户强制将...

NSURLSession的基本使用

转载http://www.jianshu.com/p/04050398c602 NSURLSession的基本使用 .1 涉及知识点 (1)使用步骤 使用NSURLSession创...

NSURLSession 教程

为什么要使用NSURLSession? 翻译原文 ,所有版权规其所有。 well,先来看一些优点: 后台上传和下载:只需在创建NSURLSession的时候配置一个选项,就能得到后台网络的所有好...

用NSURLSession从网络获取图片

#import @interface DataTaskViewController : UIViewController @property (weak, nonatomic) IBOutlet...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)