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 ...
随机推荐
- Java8的flatMap如何处理有异常的函数
Java8的flatMap函数,作用是:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional. 见到的映射函数往往都只有一句话,连大括号都不需要加的,如下: ...
- SQLITE在IIS中使用问题
在WEB中使用这个数据库时,System.Data.SQLite.dll 这个经常会出问题 主要是版本问题,sqlite.DLL的版本要和Framework版本匹配 这是下载地址 http://www ...
- bzoj5281/luogu4377 Talent Show (01分数规划+背包dp)
就是01分数规划的思路,只不过当把w[i]-r*t[i]>0的选完以后如果w值还没达到要求,那就再01背包dp一下就好了(dp时w值>W的时候就存在W里就不会爆内存了). (跑得很慢..大 ...
- display position 和float的作用和关系
1.传统布局由这三者构成. 2.position设为absolute,那么display一定是block,因此对于span来说,就可以设置高和宽了. 3.position为relative ,那么fl ...
- 通过url传递参数如果汉字乱码采用的方法
urlCodeDeal 方法把汉字编码, 在Jsp界面通过Escape.unescape方法,将编码反编译成汉字. 下面是urlCodeDeal方法: //UrlCode 处理代码 function ...
- idea 普通 web项目配置启动【我】
首先说这是一个普通的java web项目,没有用到maven. 检出项目: 项目是先用 乌龟svn 在 编辑器外部检出到一个目录下,然后再用 idea的 open 打开这个目录生成的.[因为直接用i ...
- MyEclipse 检出新项目后,如果项目名称签名有个红色感叹号
MyEclipse 检出新项目后,如果项目名称签名有个红色感叹号,那么看 Problems中的错误提示(如果找不到Problems窗口,点 菜单栏的 Window——Reset Perspective ...
- 上传znbsite
1.将本地文件打包为zip: 2.备份服务器上的classes文件夹下面的配置文件: 3.上传zip,释放到tomcat下: 4.覆盖classes文件夹中的配置文件,启动tomcat:
- 百度echart初用总结
1.先下载echarts.js.我在百度下载的是 echarts-2.2.7 (from Baidu).压缩包里面的build->dist中的echarts.js或者echarts-all.js ...
- item2乱码问题
使用的是 mac 环境,本地使用终端打开中文可以正常显示,但是连接远端服务器上发现就编程乱码了,之前一直是好好的,但是突然有一天开始就乱码了,怀疑是我电脑升级后导致系统环境配置发生变化引起的.直接上解 ...