为了说清楚下一篇文章需要了解一下NSURLConnection及NSURLConnectionDataDelegate
二.NSURLConnection
@interface ViewController ()<NSURLConnectionDataDelegate>
@end
@implementation ViewController
- (void)downLoadFile2{
NSURL * url = [NSURL URLWithString:@"http://localhost/resources/videos/minion_03.mp4"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//NSURLConnectionDataDelegate代理方法,不是NSURLConnectionDelegate和这个NSURLConnectionDownloadDelegate.异步子线程,自动开启下载,
[NSURLConnection connectionWithRequest:request delegate:self];
//这个方法和上面的相同
[[NSURLConnection alloc] initWithRequest:request delegate:self];
//后面参数为YES表示立刻执行,与上面两个方法相同. 当参数为NO时,此行代码只是建立连接
NSURLConnection * conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
//根据需求在恰当的时候要手动开启任务.
[conn start];
}
三.NSURLConnection及代理方法:
//NSURLConnectionDataDelegate常用代理方法:
//请求失败时调用(请求超时.网络异常)
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
}
//接收到响应就调用
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
}
//接收到服务器数据就会调用,可能会被调用多次,如果文件很小,只调用一次就下载完,如果文件很大一点一点下,调用多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
}
//加载完毕后调用(服务器数据已经完全下载那一刻调用)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
}
因为应用是在沙盒(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件:
Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应
用退出后删除
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
在一个APP中如果要数据跟随APP长时间保存又不需要备份,要将数据存储到APP的Library-->Caches文件夹中(沙盒),不能存储到Documents和tmp文件夹中,tmp文件夹在内存吃紧的时候回自动清除掉,Documents文件夹是用来备份的,如果这个文件夹内容过大是不能通过Apple审核的.