首页 > 代码库 > iOS开发网络篇—文件下载(一·不合理)
iOS开发网络篇—文件下载(一·不合理)
iOS开发网络篇—文件下载(一·不合理)
一、小文件下载
如果文件比较小,下载方式会比较多
直接用NSData的+ (id)dataWithContentsOfURL:(NSURL *)url;
利?NSURLConnection发送一个HTTP请求去下载
如果是下载图片,还可以利用SDWebImage框架
二、沙盒
1.在finder中,系统的一些文件(资源库)是隐藏的,可以通过在终端运行下图的代码,显示隐藏的文件。
显示隐藏系统文件:
defaults write com.apple.finder AppleShowAllFiles YES
2.制作替身,以便查看应用沙盒。
推荐工具,SimPholders,可以用来查看沙盒。
三、大文件下载示例
提示:该项目代码,仅为示例,并不合理。
1 // 2 // YYViewController.m 3 // 01-文件的下载(不合理) 4 // 5 // Created by apple on 14-6-30. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h"10 11 @interface YYViewController ()12 @property(nonatomic,strong)NSMutableData *fileData;13 - (IBAction)star;14 15 @end16 17 @implementation YYViewController18 19 - (void)viewDidLoad20 {21 [super viewDidLoad];22 }23 24 - (IBAction)star {25 //创建下载路径26 27 NSURL *url=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/resources/videosres.zip"];28 29 //创建一个请求30 NSURLRequest *request=[NSURLRequest requestWithURL:url];31 32 //发送请求(使用代理的方式)33 NSURLConnection *connt=[NSURLConnection connectionWithRequest:request delegate:self];34 [connt start];35 }36 37 #pragma mark- NSURLConnectionDataDelegate代理方法38 /*39 *当接收到服务器的响应(连通了服务器)时会调用40 */41 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response42 {43 //初始化data44 self.fileData=http://www.mamicode.com/[NSMutableData data];45 }46 47 /*48 *当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)49 */50 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data51 {52 //一点一点接收数据。53 NSLog(@"接收到服务器的数据!---%d",data.length);54 [self.fileData appendData:data];55 }56 57 /*58 *当服务器的数据加载完毕时就会调用59 */60 -(void)connectionDidFinishLoading:(NSURLConnection *)connection61 {62 // 下载完毕63 // 大文件不放Documents, 可以放Library\Caches或者tmp64 // NSString *fullpath=[caches stringByAppendingString:@"video.zip"];65 66 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];67 NSString *filepath = [caches stringByAppendingPathComponent:@"video.zip"];68 [self.fileData writeToFile:filepath atomically:YES];69 70 NSLog(@"下载完毕");71 }72 /*73 *请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)74 */75 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error76 {77 }78 79 @end
模拟器:
点击屏幕上得点击下载按钮,下载在本地服务器上的文件。
代码说明:
在处理大文件下载问题上,无论使用同步或者异步的方式下载,都是一次性拿到所有的数据,不可取。所以更合适的是使用代理的方式进行处理。
这个项目中,花了很长的时间在拼接数据上,此外又花费了很长的时间放在了写入系统沙盒上。且会占用大量的内存空间。这种方法是不合理的,更合适的方法应该是一边拼接数据,一边写入硬盘。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。