NSURLConnection及NSURLConnectionDataDelegate

为了说清楚下一篇文章需要了解一下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长时间保存又不需要备份,要将数据存储到APPLibrary-->Caches文件夹中(沙盒),不能存储到Documentstmp文件夹中,tmp文件夹在内存吃紧的时候回自动清除掉,Documents文件夹是用来备份的,如果这个文件夹内容过大是不能通过Apple审核的.

posted @ 2015-11-11 21:53  LDSmallCat  阅读(558)  评论(0编辑  收藏  举报