iOS NSURLConnection下载(断点续传)

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄

01. NSURLConnection下载

================================================================================

1>  NSURLResponse 属性

URL                    客户端请求的URL

MIMEType               告诉客户端返回的二进制数据可以用什么软件打开

expectedContentLength  二进制数据(下载文件)的长度

textEncodingName       文本编码名称,UTF8/GB2312

suggestedFilename      建议的文件名


*** NSURLConnection做简单的网络连接非常简单,但是复杂的网络操作,非常麻烦


2使用异步方法下载文件


问题:

1. 没有进度

2. 会有瞬间的内存峰值


3使用代理方法下载文件

#pragma mark - NSURLConnectionDataDelegate方法

// 1. 接收到服务器响应,下载前的准备工作

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    

}

// 2. 接收到服务器数据,可能会多次

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    

}

// 3. 数据接收完成

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    

}

// 4. 出现错误,提示网络操作千万不要忘记出错处理

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

    

}


问题:

1. iPhone 5上会出现峰值

2. 不过可以跟进进度


4每次接收到数据逐一写入文件 —— 可以解决内存峰值的问题


问题:

1.  多线程

[conn setDelegateQueue:[[NSOperationQueue alloc] init]];


2.  UI更新

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate date]];


02. NSURLSession介绍

================================================================================

iOS 7 新推出的网络解决方案,解决了 NSURLConnection 中的很多问题。


NSURLSession的使用相对有些复杂,对于简单网络的网络请求,仍然可以使用 NSURLConnection


三个任务

1>  NSURLSessionDataTask        传统的 GET / POST 方法,包括 POST 上传文件

2>  NSURLSessionDownloadTask    下载任务

3>  NSURLSessionUploadTask      上传任务 - PUT 方式的文件上传


03. NSURLSession下载演练

================================================================================


1通过块代码回调实现下载

NSURLSession *session = [NSURLSession sharedSession];

[[session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {

    NSLog(@"%@ %@", location.path, [NSThread currentThread]);

}] resume];


特点:

1.  没有内存峰值

2.  文件直接保存在临时目录,如果不做进一步处理,会直接删除

3.  完成块代码同样运行在后台线程


2下载进度跟进

- (void)viewWillDisappear:(BOOL)animated {

    // 自定义Session会对self进行强引用,在视图消失之前应该取消session的所有任务,否则会造成内存泄漏

    [self.session invalidateAndCancel];

}


3断点续传

/** 开始下载 */

- (void)downloadURL:(NSURL *)url {

    self.downloadTask = [self.session downloadTaskWithURL:url];

    [self.downloadTask resume];

}


/** 暂停 */

- (void)pause {

    [self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {

        self.resumeData = resumeData;

        self.downloadTask = nil;

    }];

}


/** 继续 */

- (void)resume {

    if (self.resumeData == nil) {

        return;

    }

    

    self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];

    self.resumeData = nil;

    [self.downloadTask resume];

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值