NSURLResponse下载
//
// ViewController.m
// 05-NSURLConnestion(下载)
//
// Created by jerry on 15/10/24.
// Copyright (c) 2015年 jerry. All rights reserved.
// #import "ViewController.h"
/**
*
NSURLConnection存在的问题,ios2.0就有了,专门用来负责网络数据的传输,已经有10年的历史
特点:
- 处理简单的网络操作,非常简单,
- 但是处理复杂的网络操作就非常麻烦,
ASI&AFN
iOS 5.0之前,网络下载是一个黑暗的时代:
iOS 5.0之前通过代理的方式来进行处理网络数据的。
存在的问题:
1.下载的过程中,没有进度的跟进,导致用户体验很不好。
2.存在内存峰值 解决办法:
1.通过代理的方式来处理网络数据。 代理方法还是出现峰值:
是因为系统在全部接受完毕之后才去写入,想要解决这个问题,我们可以边接收,边写入
*/
/**
* NSURLConnectionDownloadDelegate 只适合杂志的下载
*/
@interface ViewController ()<NSURLConnectionDataDelegate>
// 下载文件的总长度
@property(nonatomic,assign)long long expectedContentLength; // 当前下载长度
@property(nonatomic,assign)long long currentLength;
// 接收到的数据,用于数据拼接,等所有数据拼接完,写入磁盘
@property(nonatomic,strong)NSMutableData *receiveData;
@end @implementation ViewController - (NSMutableData *)receiveData
{
if (_receiveData == nil) {
_receiveData = [NSMutableData data];
}
return _receiveData;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 下载用get
// 1,url NSString *urlStr = @"http://127.0.0.1/demo.json";
// 百分号的转译
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlStr];
// 2.请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy: timeoutInterval:2.0f];
/**
* 通过代理解决,就不能使用block
*/
// // 连接
// [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//
// //把下载的数据放在桌面
// [data writeToFile:@"/Users/jerry/Desktop/123.m4v" atomically:YES];
// NSLog(@"结束");
// }];
// 3.连接
NSURLConnection *connect = [NSURLConnection connectionWithRequest:request delegate:self]; // 4.启动网络连接
[connect start];
}
#pragma mark -- 实现代理方法 // 1.接收到服务器的响应,做好准备,开始接收数据
/**
* - (instancetype)initWithURL:(NSURL *)URL MIMEType:(NSString *)MIMEType expectedContentLength:(NSInteger)length textEncodingName:(NSString *)name;
NSURLResponse 响应
URL:请求的资源路径。
MIMEType:(Content-Type)类型返回的二进制数据类型。
expectedContentLength:预期文件的长度。对于下载来说就是文件的大小
textEncodingName:文本的编码名称。(utf-8)
****** utf-8 - 几乎涵盖了全世界两百多个国家的语言文字。
gb2312 - 国内的老的网站还在使用这个编码,包含六千七百多个汉字。
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"文件的大小:%lld",response.expectedContentLength); // 记录文件总程度
self.expectedContentLength = response.expectedContentLength; // 将下载的长度清零
self.currentLength = ; } // 2.接收到服务器返回的数据 拼接数据。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"文件长度:%tu",data.length); // 记录当前已经下载的文件的长度。
self.currentLength += data.length; float progress = (float)self.currentLength/self.expectedContentLength;
NSLog(@"%f",progress);
// 拼接数据
[self.receiveData appendData:data];
} // 3.接受数据完毕,所有数据传输完毕
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"接受数据完毕,所有数据传输完毕"); // 写入磁盘
[self.receiveData writeToFile:@"/Users/jerry/Desktop/123.json" atomically:YES];
// 释放内存
self.receiveData = nil;
}
// 4.下载过程中出现错误
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"下载过程中出现错误");
} @end
NSURLResponse下载的更多相关文章
- 通读SDWebImage①--总体梳理、下载和缓存
本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWebImageManage ...
- 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节
这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...
- iOS--异步下载
#import "ViewController.h"#import "UIImageView+WebCache.h"@interface ViewControl ...
- iOS 简单的分段下载文件
首先自己写个请求数据的类 首先.h文件 #import <Foundation/Foundation.h> @interface Downloaders : NSObject<NSU ...
- IOS 断点下载
// // ViewController.m // UI4_断点下载 // // Created by qianfeng on 15/8/19. // Copyright (c) 2015年 ZBC. ...
- iOS 学习 - 10下载(3) NSURLSession 音乐 篇
使用 NSURLSession 下载,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中 // // ViewController.m // Web ...
- iOS 学习 - 10下载(2) NSURLSession 图片 篇
使用NSURLSessionDownloadTask下载文件的过程与前面差不多,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中. // // V ...
- iOS 学习 - 10下载(1) NSURLConnection 篇
程序的实现需要借助几个对象: NSURLRequest:建立了一个请求,可以指定缓存策略.超时时间.和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSM ...
- 简进祥===AFNetWorking 下载视频文件
获取沙盒中的Documents地址的代码. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUs ...
随机推荐
- BZOJ2141排队——树状数组套权值线段树(带修改的主席树)
题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别 ...
- poj1154 【DFS】
LETTERS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8976 Accepted: 4017 Descripti ...
- 2015 HIAST Collegiate Programming Contest D
You have been out of Syria for a long time, and you recently decided to come back. You remember that ...
- 自学huawei之路-AC6005版本升级步骤
返回自学Huawei之路 自学huawei之路-AC6005版本升级步骤 本文主要采用WEB网管界面升级,方便快捷,推荐使用此方法. 一.升级前检查 1.1 原AC/AP设备版本确认 disp ...
- 【BZOJ3512】DZY Loves Math IV(杜教筛)
[BZOJ3512]DZY Loves Math IV(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\] 其中\(n\le 10^5,m\l ...
- 【BZOJ4822】[CQOI2017]老C的任务(扫描线)
[BZOJ4822][CQOI2017]老C的任务(扫描线) 题面 BZOJ 洛谷 题解 没有修改操作,都不需要分治了... 直接排序之后扫描线算贡献就好了... 不知道为啥洛谷上过不了... #in ...
- 【原创】python多线程测试接口性能
除了使用性能测试工具进行性能测试,我们也可以直接用python多线程进行性能测试. 下面,使用这几个模块,对一个查询接口做性能测试: requests:发送http请求 json:返回的字符串转换成j ...
- 初探angular2
Angular2 是一款开源JavaScript库,由Google维护,用来协助单一页面应用程序运行. Angular2 是 Angular 1.x 的升级版本,性能上得到显著的提高,能很好的支持 W ...
- Python基础学习(四)
菜鸟咀嚼python基础之继续. 一.返回函数 第三章已经简单操作了Python的高阶函数,目前继续练手函数作为返回值的特效:通常,高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回. 案 ...
- Solr7.1---Getting Start
目前最新版的Solr是7.1.0 有个我还不清楚的地方是,为何5.5.X或者6.6.X版本还在更新,给我的感觉好像每一个大版本都有自己的维护团队.不管了. 首先-系统要求 JDK1.8+ 解压Solr ...