文档章节

IOS 练习 之 大文件下载优化

小鸡蹲蘑菇
 小鸡蹲蘑菇
发布于 2015/05/20 10:40
字数 496
阅读 77
收藏 0

// NSMutableData 的append 方式下载会将数据放入到内存中,等待文件下载完成后才会进行写入操作,这样一来,app中的内存将会非常大,等同于下载的文件大小。
// 所以可以使用句柄控制写入,即下载一部分数据就写入到存储介质中。这样可以大量节省内存占用
//  ViewController.m
//  DownLoadBig
//
//  Created by apple on 15/5/5.
//  Copyright (c) 2015年 apple. All rights reserved.
//
#import "ViewController.h"
@interface ViewController () <NSURLConnectionDataDelegate,UIAlertViewDelegate>
@property (weak, nonatomic) IBOutlet UIProgressView *proView;
@property (nonatomic,strong) NSMutableData *fileData;
@property (nonatomic,copy) NSString *total;
@property (nonatomic,strong) UIAlertView *alert;
@property (nonatomic,strong) NSFileHandle *wHandle;
@property (nonatomic,assign) NSInteger currentLength;
@property (nonatomic,strong) NSString *urlstr;
@end
@implementation ViewController
- (NSString *)urlstr
{
    if (_urlstr == nil){
        _urlstr = @"http://124.205.69.135/files/8135000000D8446F/trial2.autodesk.com/NET16SWDLD/2016/ACD/DLM/AutoCAD_2016_Simplified_Chinese_Win_32bit_dlm.sfx.exe";
    }
    return _urlstr;
}
-(NSMutableData *)fileData
{
    
    if (_fileData == nil){
        
        _fileData = [NSMutableData data];
    }
    return _fileData;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.proView.progress = 0.0;
    
    NSString *AppName =  [[self.urlstr componentsSeparatedByString:@"/"] lastObject];
    NSString *cachestr = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [cachestr stringByAppendingPathComponent:AppName];
    NSFileManager *mgr = [NSFileManager defaultManager];
    
    [mgr createFileAtPath:filePath contents:nil attributes:nil];
    self.wHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
    
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSURL *url = [NSURL URLWithString:self.urlstr];
//
    
//    NSURL *url = [NSURL URLWithString:@"http://125.39.68.200/files/2011000000F9723B/xiazai.888rj.com/Soft/T/Thunder_7.9.26.4824_XiaZaiBa.exe"];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];
    
    [NSURLConnection connectionWithRequest:req delegate:self];
//    NSLog(@"touch");
    
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
//    NSLog(@"jieshou");
//    NSLog(@"%@%",res.allHeaderFields[@"Content-Length"]);
     self.total= res.allHeaderFields[@"Content-Length"];
//    self.total = res.expectedContentLength
    
    
    
    
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    
//    [self.fileData appendData:data];
    [self.wHandle seekToEndOfFile];// 寻找文件的末尾偏移量
    [self.wHandle writeData:data];
    self.currentLength += data.length;
    
    self.proView.progress = (double)self.currentLength  / self.total.intValue;
    NSLog(@"%d%",self.currentLength);
    
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    
  
//    [self.fileData writeToFile:filePath atomically:YES];
//    /Users/apple/Library/Developer/CoreSimulator/Devices/612DC518-63EA-4614-AA42-30CAECF2B57B/data/Containers/Data/Application/77095FDC-6D9B-4BB6-AC5F-460EB80DBD22/Library/Caches
    
    NSString *totalstr = [ NSString stringWithFormat:@"软件总大小:%@",self.total];
    self.alert = [[UIAlertView alloc]  initWithTitle:@"下载完成" message:totalstr delegate:self cancelButtonTitle:@"ok"  otherButtonTitles: nil ];
    
    [self.alert show];
}
@end

© 著作权归作者所有

小鸡蹲蘑菇
粉丝 5
博文 68
码字总数 24144
作品 0
海淀
私信 提问
iOS高仿QQ侧滑控件、下载框架、动画效果、扫一扫、颜色变化、K线图等源码

iOS精选源码 仿京东"加入购物车"转场动画(http://www.code4app.com/thread-28162-1-1.html) ColorTool(颜色转换)(http://www.code4app.com/thread-29256-1-1.html) Swift 专业版K线(http://w......

sunnyaigd
2018/04/17
65
0
十八般武艺!移动应用开发者必备的18款利器

“工欲善其事,必先利其器”。身为一名移动应用的开发者,光有技术是不够的,必备的应用可以为您的开发工作如虎添翼。随着Android与iOS系统的不断更新换代,相关的的应用也层出不穷,本文推荐...

looen
2011/11/25
2.3K
3
10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
203
0
iPhone 4 与 iPhone 5 在 iOS 7 下的较量

苹果公司于今年WWDC 2013最新发表的iOS 7系统,支持 iOS 7的机型包括 iPhone 4、iPhone 4S、iPhone 5、iPod touch 16GB / 32GB / 64GB、iPad 2、iPad 3、iPad 4 和 iPad mini。不过并不是支持...

it224
2013/07/21
2.2K
6
Unity StreamingAssetsPath等特殊文件夹的权限方式记录

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/KiTok/article/details/90749312 Unity特殊文件夹的权限方式记录...

KitStar
06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部