前两节,我介绍了ASI的“同步与异步”及“文件上传”的知识,如有什么疑问的,请点击这里。这一节通过一个简单的例子,介绍一下通过ASI实现文件的下载。
界面很简单,"Start": 开始下载; “Stop”: 暂停下载; 支持断点续传。
1.要定义一个request成员属性,对ASI的request对象进行强引用。
@property(nonatomic,strong) ASIHTTPRequest *request;
2.实现代理ASIProgressDelegate,用来显示进度条的进度。
// 当发出一个请求,也许5秒之后才有响应,没有等到响应回来的时候你就切换了控制器,则产生了野指针!!! 所以一定要在控制器销毁的时候调用下面代码!!
- (void)dealloc {
    [self.request clearDelegatesAndCancel];
}- (IBAction)start {
    [self downloadFile];
}
- (IBAction)stop {
    [self.request clearDelegatesAndCancel];
}- (void)downloadFile {
    // 1. 创建请求对象(我使用的测试链接,是下载的搜狗输入法)
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/link?url=bvCTezSVwkMRVbM2cQ5ntfsumx3AhZOEVzpe6EfbneMN8GFmkhC0BfXkoq1Sfus9v-wW19U37IvbEkdO5dWvRYeakTk0uPtTBzz6Xa5gF_y"];
    self.request = [ASIHTTPRequest requestWithURL:url];
    
    // 2. 文件保存路径
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    
    // 下载完毕后正式的文件
    NSString *filePath = [caches stringByAppendingPathComponent:@"sougou.zip"];
    self.request.downloadDestinationPath = filePath;
    
    // 临时下载文件,用来支持断点续传。续传成功会自动生成sougou.zip
    NSString *tempFilePath = [caches stringByAppendingPathComponent:@"sougou.temp.zip"];
    self.request.temporaryFileDownloadPath = tempFilePath;
    
    // 3. 设置下载进度代理
    // 用self.progressView作为代理,因为UIProgressView本身就有setProgress方法,相当于也实现了setProgress的代理方法。就能直接看到progressView的显示进度了,一举两得.
    self.request.downloadProgressDelegate = self.progressView;
    
    //self.request.downloadProgressDelegate = self;
    
    // 4. 请求超时控制
    self.request.timeOutSeconds = 10;
    
    // 5. 支持断点续传
    self.request.allowResumeForFileDownloads = YES;
    
    [self.request startAsynchronous];
}self.request.downloadProgressDelegate = self.progressView;
上面一句代码其实等价于
self.request.downloadProgressDelegate = self;
- (void)setProgress:(float)newProgress {
   // NSLog(@"Thread:%@",[NSThread currentThread]);
    self.progressView.progress = newProgress;
}原文:http://blog.csdn.net/sinat_27706697/article/details/45575191