一、大文件下载
1.方案:利用NSURLConnection和它的代理方法
1> 发送一个请求

  1. // 1.URL
  2. NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos.zip"];
  3. // 2.请求
  4. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  5. // 3.下载(创建完conn对象后,会自动发起一个异步请求)
  6. [NSURLConnection connectionWithRequest:request delegate:self];

2> 在代理方法中处理服务器返回的数据

  1. /**
  2. 在接收到服务器的响应时:
  3. 1.创建一个空的文件
  4. 2.用一个句柄对象关联这个空的文件,目的是:方便后面用句柄对象往文件后面写数据
  5. */
  6. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
  7. {
  8. // 文件路径
  9. NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  10. NSString *filepath = [caches stringByAppendingPathComponent:@"videos.zip"];
  11.  
  12. // 创建一个空的文件 到 沙盒中
  13. NSFileManager *mgr = [NSFileManager defaultManager];
  14. [mgr createFileAtPath:filepath contents:nil attributes:nil];
  15.  
  16. // 创建一个用来写数据的文件句柄
  17. self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filepath];
  18. }
  19.  
  20. /**
  21. 在接收到服务器返回的文件数据时,利用句柄对象往文件的最后面追加数据
  22. */
  23. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
  24. {
  25. // 移动到文件的最后面
  26. [self.writeHandle seekToEndOfFile];
  27.  
  28. // 将数据写入沙盒
  29. [self.writeHandle writeData:data];
  30. }
  31.  
  32. /**
  33. 在所有数据接收完毕时,关闭句柄对象
  34. */
  35. - (void)connectionDidFinishLoading:(NSURLConnection *)connection
  36. {
  37. // 关闭文件
  38. [self.writeHandle closeFile];
  39. self.writeHandle = nil;
  40. }

2.注意点:千万不能用NSMutableData来拼接服务器返回的数据

二、NSURLConnection发送异步请求的方法
1.block形式 - 除开大文件下载以外的操作,都可以用这种形式

  1. [NSURLConnection sendAsynchronousRequest:<#(NSURLRequest *)#> queue:<#(NSOperationQueue *)#> completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
  2.  
  3. }];

2.代理形式 - 一般用在大文件下载

  1. // 1.URL
  2. NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login?username=123&pwd=123"];
  3. // 2.请求
  4. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  5. // 3.下载(创建完conn对象后,会自动发起一个异步请求)
  6. [NSURLConnection connectionWithRequest:request delegate:self];
 

【iOS基础】NSURLConnection的更多相关文章

  1. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  2. iOS 基础日记-修饰符

    今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...

  3. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  4. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  5. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  6. iOS 基础:Frames、Bounds 和 CGGeometry

    https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...

  7. iOS 基础入门--Bull' Eye 小游戏 

      说明   Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...

  8. iOS 基础函数解析 - Foundation Functions Reference

    iOS 基础函数解析 - Foundation Functions Reference 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名- ...

  9. 动画 iOS基础

    动画 iOS基础 1.     basic animation  基础动画 一个基础动画 在一个开始值和一个结束值之间运动   messageLabel.alpha=0.0; [UIView  ani ...

  10. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

随机推荐

  1. Python基础----函数

    1.作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'wupeiqi' print name 下面的结论对吗? 外层变量,可以被内 ...

  2. OD: Vulnerability Detection

    终于看完第二篇漏洞利用原理高级篇,内容虽然看懂了,但深入理解不够,这部分内容以后还要不断强化. 第三篇是漏洞挖掘技术,篇首的话中,提到程序的不可计算性(图灵机的停机问题).希伯尔数学纲领的失败,结尾说 ...

  3. SQL从入门到基础 - 01 数据库开发及ADO.Net

    一.数据库概述 1. 用自定义文件格式保存数据的劣势:并发性差,查找数据的速度差. 2. DBMS(DataBase Management System数据库管理系统)和数据库.平时谈到“数据库”的含 ...

  4. msi软件包无法安装

    安装某些msi软件包,提示“This advertised application will not be installed because it might be unsafe. Contact ...

  5. python的exec、eval详解

    exec exec语句用来执行储存在字符串或文件中的Python语句.例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句.下面是一个简单的例子. exec ' ...

  6. 详解CSS选择器、优先级与匹配原理

    原文链接:http://polaris1119.javaeye.com/blog/764428 作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候.这里给大家列举一个 ...

  7. 一行代码实现C#的四舍五入

    C# 使用的是”四舍六入五成双”的银行家算法: 1 2 Math.Round(2.5); // 2 Math.Round(1.5); // 2 由此可见,1.5的Round符合我们的四舍五入,于是Ha ...

  8. 2016最新一元云购完整源码 云购CMS系统 带安卓和ios手机客户端 源码免费分享

    原文转自:http://www.zccode.com/thread-724-1-1.html 该资源说明: 看起来不错的一套一元云购CMS源码,源码包里面带了安卓和ios手机客户端,手机客户端需要自己 ...

  9. android 安卓 微信布局 [1]

    微信布局 直接上代码吧 ---------------------------------------- 头部 -------------------------------------------- ...

  10. 网络请求时 返回 App Transport Security has blocked a cleartext HTTP

    如上图,是因为 Xcode7 没有对 plist 进行 http 请求的配置  所致 这时需要  加上上面的plist的红框中 的内容  并且 设置 为 yes  如下图