本文主要是介绍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 @end
16
17 @implementation YYViewController
18
19 - (void)viewDidLoad
20 {
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 *)response
42 {
43 //初始化data
44 self.fileData=[NSMutableData data];
45 }
46
47 /*
48 *当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)
49 */
50 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
51 {
52 //一点一点接收数据。
53 NSLog(@"接收到服务器的数据!---%d",data.length);
54 [self.fileData appendData:data];
55 }
56
57 /*
58 *当服务器的数据加载完毕时就会调用
59 */
60 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
61 {
62 // 下载完毕
63 // 大文件不放Documents, 可以放Library\Caches或者tmp
64 // 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 *)error
76 {
77 }
78
79 @end
模拟器:
点击屏幕上得点击下载按钮,下载在本地服务器上的文件。
代码说明:
在处理大文件下载问题上,无论使用同步或者异步的方式下载,都是一次性拿到所有的数据,不可取。所以更合适的是使用代理的方式进行处理。
这个项目中,花了很长的时间在拼接数据上,此外又花费了很长的时间放在了写入系统沙盒上。且会占用大量的内存空间。这种方法是不合理的,更合适的方法应该是一边拼接数据,一边写入硬盘。
这篇关于iOS开发网络篇—文件下载(一·不合理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!