//
// 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下载的更多相关文章

  1. 通读SDWebImage①--总体梳理、下载和缓存

    本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWebImageManage ...

  2. 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节

    这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...

  3. iOS--异步下载

    #import "ViewController.h"#import "UIImageView+WebCache.h"@interface ViewControl ...

  4. iOS 简单的分段下载文件

    首先自己写个请求数据的类 首先.h文件 #import <Foundation/Foundation.h> @interface Downloaders : NSObject<NSU ...

  5. IOS 断点下载

    // // ViewController.m // UI4_断点下载 // // Created by qianfeng on 15/8/19. // Copyright (c) 2015年 ZBC. ...

  6. iOS 学习 - 10下载(3) NSURLSession 音乐 篇

    使用 NSURLSession 下载,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中 // // ViewController.m // Web ...

  7. iOS 学习 - 10下载(2) NSURLSession 图片 篇

    使用NSURLSessionDownloadTask下载文件的过程与前面差不多,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中. // // V ...

  8. iOS 学习 - 10下载(1) NSURLConnection 篇

    程序的实现需要借助几个对象: NSURLRequest:建立了一个请求,可以指定缓存策略.超时时间.和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSM ...

  9. 简进祥===AFNetWorking 下载视频文件

    获取沙盒中的Documents地址的代码. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUs ...

随机推荐

  1. hdu 3727 Jewel (可持久化线段树+bit)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=3727 题意: 对一段序列进行四种操作: Insert x :在序列尾部插入一个x: Query_1 s ...

  2. 【POI每日题解 #9】SKA-Piggy Banks

    题目链接 题意: 有一棵环套树 求最少从多少个节点出发能沿边走过整棵树 环套树 并查集求联通块 有几块就砸几个 太简单不发代码了 不过某大佬的环套树找环dfs让我研究了好久… 贴一下以Orz #inc ...

  3. 【BZOJ4903】【UOJ#300】吉夫特(卢卡斯定理,动态规划)

    [BZOJ4903][UOJ#300]吉夫特(卢卡斯定理,动态规划) 题面 UOJ BZOJ:给的UOJ的链接...... 题解 首先模的质数更小了,直接给定了\(2\).当然是卢卡斯定理了啊. 考虑 ...

  4. 洛谷 P3253 [JLOI2013]删除物品 解题报告

    P3253 [JLOI2013]删除物品 题目描述 箱子再分配问题需要解决如下问题: (1)一共有\(N\)个物品,堆成\(M\)堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能 ...

  5. IPython Notebook 运行python Spark程序

    1.安装pip 因为centos7.0自带的python系统是2.7.5,并没有安装pip,需要先安装pip $ wget https://bootstrap.pypa.io/get-pip.py $ ...

  6. Java -- JDBC 学习--调用函数&存储过程

    调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...

  7. Elasticsearch基础知识要点QA

    前言:本文为学习整理实践他人成果的记录型博客.在此统一感谢各原作者,如果你对基础知识不甚了解,可以通过查看Elasticsearch权威指南中文版, 此处注意你的elasticsearch版本,版本不 ...

  8. 2018 省选 D1T2 IIIDX

    题目大意: 给出k.n个数选择一种字典序最大的排列,使得对于任意的i,di>=d[i/k](下取整 下同) 分析: 很容易想到的是建树,将i的父亲设为[i/k],之后建有向边. 60分贪心: 将 ...

  9. spring MVC 如何接收前台传入的JSON对象数组

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  10. java代码示例(6-1)

     创建Administrator.java /** * 需求分析:定义用户名,密码 * @author chenyanlong * 日期:2017/10/15 */ package com.hp.te ...