首页 > 其他 > 详细

Session下载

时间:2015-06-20 20:43:31      阅读:265      评论:0      收藏:0      [点我收藏+]
 1 // <NSURLSessionDownloadDelegate> 代理
 2 /*如果要监听 session 的下载进度,不能使用 `sharedSession`
 3  * 是一个全局的单例
 4 */
 5 NSURL *url = [NSURL URLWithString:@"http://填入你要访问的资源"];
 6     
 7     NSLog(@"start");
 8     
 9     // 如果发起的任务带有 completion 回调,不会走代理!
10 //    [[self.session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
11 //        NSLog(@"%@ %@", location, [NSThread currentThread]);
12 //    }] resume];
13     // 直接建立下载任务并且启动,后续的进度监听由代理负责
14     [[self.session downloadTaskWithURL:url] resume];
15 #pragma mark - 下载代理方法
16 // 必须的
17 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
18     NSLog(@"%@", location);
19 }
20 
21 // 在 iOS 7.0 是必须的
22 /**
23  session
24  downloadTask
25  bytesWritten                   本次下载字节数
26  totalBytesWritten              已经下载字节数
27  totalBytesExpectedToWrite      总大小
28  */
29 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
30     
31     float progress = (float)totalBytesWritten / totalBytesExpectedToWrite;
32     NSLog(@"%f %@", progress, [NSThread currentThread]);
33 }
34 
35 // 在 iOS 7.0 是必须的
36 // 续传代理方法,没什么用处
37 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes {
38     NSLog(@"%s", __FUNCTION__);
39 }
40 
41 #pragma mark - 懒加载
42 - (NSURLSession *)session {
43     if (_session == nil) {
44         /**
45          * 下载本身是有一个独立线程`顺序`完成的!
46          
47          1. 会话配置,大多使用 默认的
48          2. 代理 self
49          3. `代理工作的队列`,可以使用 nil 
50             ** 根下载没有任何关系,指定`代理工作的队列`
51             ** 无论选择什么队列,都不会影响主线程!
52          
53             - nil 会新建一个队列,NSOperation 中没有串行队列的概念!白胡子老头!
54             - [[NSOperationQueue alloc] init] 和 nil 相同
55             - [NSOperationQueue mainQueue] 代理方法在主线程异步执行!
56          
57             * 如果代理方法中,有耗时操作,就选择异步队列
58             * 如果没有耗时操作,选择主队列
59          */
60         NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
61         
62         _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
63     }
64     return _session;
65 }

 

Session下载

原文:http://www.cnblogs.com/iosBike/p/4590932.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!