zoukankan      html  css  js  c++  java
  • [iOS 多线程 & 网络

    A.ASI框架中的下载
    1.实现步骤
    在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可。
    (1)创建请求对象;
    (2)设置下载文件保存的路径;
    (3)发送下载文件的网络请求(异步)。
    按照上面的几个步骤执行,程序会自动开启异步线程,一点一点的把数据写入到指定的文件路径,而且不论是下载多大的文件都不会占用大量的内存空间。
    ASI框架是基于底层的cfnoteworking的,性能很好。当然也可以设置block,或者是监听下载的进度。
     
    自动会使用“边下边写”
    使用进度代理方法获取下载进度  setProgress
     
     1 //
     2 //  ViewController.m
     3 //  ASIDownloadDemo
     4 //
     5 //  Created by hellovoidworld on 15/1/28.
     6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
     7 //
     8 
     9 #import "ViewController.h"
    10 #import "ASIHTTPRequest.h"
    11 
    12 @interface ViewController ()
    13 
    14 @property(nonatomic, strong) ASIHTTPRequest *request;
    15 
    16 @property (weak, nonatomic) IBOutlet UIProgressView *progressView;
    17 
    18 - (IBAction)startDownloading;
    19 
    20 @end
    21 
    22 @implementation ViewController
    23 
    24 - (void)viewDidLoad {
    25     [super viewDidLoad];
    26     // Do any additional setup after loading the view, typically from a nib.
    27 }
    28 
    29 - (void)dealloc {
    30     [self.request clearDelegatesAndCancel];
    31     self.request = nil;
    32 }
    33 
    34 - (IBAction)startDownloading {
    35     // 1.创建请求
    36     NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/images/images.zip"];
    37     self.request = [ASIHTTPRequest requestWithURL:url];
    38    
    39     // 2.设置文件存放路径
    40     NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    41     NSString *filePath = [cachePath stringByAppendingPathComponent:@"images.zip"];
    42     self.request.downloadDestinationPath = filePath;
    43    
    44     // 3.设置下载代理
    45     // 由于刚好下载代理方法有个setProgress,可以直接使用progressView的setProgress,直接控制进度条
    46     self.request.downloadProgressDelegate = self.progressView;
    47    
    48     // 4.支持断点下载
    49     self.request.allowResumeForFileDownloads = YES;
    50    
    51     self.request.completionBlock = ^{
    52         NSLog(@"下载完成!");
    53     };
    54    
    55     // 5.发送请求
    56     [self.request startAsynchronous];
    57 }
    58  
    59 #pragma mark - ASIProgressDelegate
    60 /** 下载进度代理方法 */
    61 //- (void)setProgress:(float)newProgress {
    62 //    self.progressView.progress = newProgress;
    63 //}
    64  
    65 @end
     
    2.断点下载
    ASI的文件下载还有一个属性可以设置是否支持断点下载。
    设置支持断点下载的代码如下:
    request.allowResumeForFileDownloads=YES;
    这样的话,比如一个文件已经下载了百分之30到程序的沙盒中,这个时候取消了下载。当下一次点击下载文件的时候,会接着下载剩余的百分之70并一点一点的写入到沙盒中。
    提示:取消下载的代码为:
        [request clearDelegatesAndCancel];
     
     
     
     
     
     
     
  • 相关阅读:
    现在转战c++的领域,纯幼儿园
    LeetCode:Majority Element
    LeetCode:Partition List
    LeetCode:Balanced Binary Tree(判断是否为二叉平衡树)
    LeetCode:Binary Tree Zigzag Level Order Traversal
    LeetCode:Binary Tree Level Order Traversal II (按层遍历)
    LeetCode:Binary Tree Postorder Traversal(二叉树的后序遍历)
    LeetCode:BInary Tree Inorder Traversal(二叉树的中序遍历)
    LeetCode:Binary Tree Preorder Traversal(二叉树的先序遍历)
    LeetCode:Implement Queue using Stacks
  • 原文地址:https://www.cnblogs.com/hellovoidworld/p/4257694.html
Copyright © 2011-2022 走看看