1.直接用NSURLConnection下载
#import "ViewController.h"
#import "DACircularProgressView.h"
 /**
  
协议中的代理方法
 开始接收到服务器的响应时调用
  - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
  
 接收到服务器返回的数据时调用(服务器返回的数据比较大时会调用多次)
  - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
  
 服务器返回的数据完全接收完毕后调用
  - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
  
 请求出错时调用(比如请求超时)
  - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
 
  */
 
@interface  ViewController () <NSURLConnectionDataDelegate>
 /**
 *  用来写数据的文件句柄对象
  */
 (nonatomic,strong)NSFileHandle *writeHandle;
 /**
 *  文件的总大小
  */
 (nonatomic,assign)longlong totalLength;
 /**
 *  当前已经写入的文件大小
  */
 (nonatomic,assign)longlong currentLength;
 
 (nonatomic,weak)DACircularProgressView *circleView;//用这个类来添加下载进度条
 @end
 
@implementation
 
void)viewDidLoad
 {
    [superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
/**
用DACircularProgress这个类添加下载进度条
      */
    DACircularProgressView *circleView = [[DACircularProgressViewalloc]init];
frame =  CGRectMake(100,  50, 100, 100);
progressTintColor = [UIColorredColor];
trackTintColor = [UIColorblueColor];
progress =  0.01;
self.viewaddSubview:circleView];
self.circleView
 }
void)touchesBegan:(NSSet *)touches withEvent:(UIEvent
 {
    // 1.URL
    NSURL *url = [NSURLURLWithString:@"http://hd.shijue.cvidea.cn/tf/140422/2330218/5355ca2
];
    // 2.请求
NSURLRequest *request = [NSURLRequestrequestWithURL:url];
     // 3.下载(创建完conn对象后,会自动发起一个异步请求)
    [NSURLConnectionconnectionWithRequest:requestdelegate:self];
 }
代理方法
 /**
 *  请求失败时调用(请求超时、网络异常)
  *
 错误原因
  */
void)connection:(NSURLConnection *)connection didFailWithError:(NSError
 {
    NSLog(@"didFailWithError");
 }
 /**
 *  1.接收到服务器的响应就会调用 (先搞一个0kb的文件,然后用writeHandle关联那个文件,最后写入数据
 响应
  */
void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
 {
    //  文件路径 沙盒中的caches的路径
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject];

    NSLog(@"caches = %@",caches);
 

    //用这个stringByAppendingPathComponent:方法会自动添加一个/表示这是个路径
    NSString *filepath = [cachesstringByAppendingPathComponent:@"photodownload.JPEG"];//先搞一个0kb的文件
     // 创建一个空的文件到沙盒中
    NSFileManager *mgr = [NSFileManagerdefaultManager];
    [mgr createFileAtPath:filepathcontents:nilattributes:nil];
     
     // 创建一个用来写数据的文件句柄
    self.writeHandle = [NSFileHandlefileHandleForWritingAtPath:filepath];//然后用writeHandle关联那个文件
     // 获得文件的总大小
    self.totalLength = response.expectedContentLength;
 }
 
 /**
 *  2.当接收到服务器返回的实体数据时调用(具体内容,这个方法可能会被调用多次)
  *
 这次返回的数据
  */
void)connection:(NSURLConnection *)connection didReceiveData:(NSData
 {
     // 移动到文件的最后面
    [self.writeHandleseekToEndOfFile];
     
     // 将数据写入沙盒(先移动到最后面再拼接)
self.writeHandlewriteData:data]; //最后写入数据
     
    //  累计文件的长度
self.currentLength += data.length;
     
    NSLog(@"下载进度:%f", (double)self.currentLength/self.totalLength);
    self.circleView.progress = (double)self.currentLength/self.totalLength;
 }
 /**
 *  3.加载完毕后调用(服务器的数据已经完全返回后)
  */
void)connectionDidFinishLoading:(NSURLConnection
 {
    self.currentLength =0;
    self.totalLength =0;
     
    //  关闭文件
    [self.writeHandlecloseFile];
    self.writeHandle =nil;
 }
 
 
 command + shift + g 来到这个路径
 
 /Users/admin/Library/Developer/CoreSimulator/Devices/250BF271-B5CD-45D2-B549-0EEB38E8AEA7/data/Containers/Data/Application/E51E876C-B8B3-4998-AD56-3239909F68A9/Library/Caches
 

 就可以看到下载的文件了
 
 
 
 
2.用AFURLConnectionOperation下载
 
 
 
     // 1.URL
    NSURL *url = [NSURLURLWithString:@"http://hd.shijue.cvidea.cn/tf/140422/2330218/5355ca2
];
    // 2.请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
     //3. 
 AFURLConnectionOperation 
 
   AFURLConnectionOperation *operation = [[AFHTTPRequestOperationalloc] initWithRequest:request];
    operation.outputStream = [NSOutputStreamoutputStreamToFileAtPath:filePathappend:NO];
    self.hud.labelText =@"正在下载";
    [self.hudshow:YES];
    [self.hudhide:YESafterDelay:10];
    [operation setDownloadProgressBlock:^(NSUInteger bytesRead,long long totalBytesRead,long long totalBytesExpectedToRead) {
        //下载的进度,如 0.53,就是 53%
        float progress =   (float)totalBytesRead / totalBytesExpectedToRead;
        //下载完成后立即执行
        if (progress ==1.0) {
//            [self.hud hide:YES];
            _haveDowned =true;
            self.hud.labelText =@"下载成功!";
            [self.hudshow:YES];
            [self.hudhide:YESafterDelay:1];
            NSLog(@" 下载完成 progress = %f",progress);
        }else{
//            [self.hud hide:YES];
            self.hud.labelText =@"下载失败!";
            [self.hudshow:YES];
            [self.hudhide:YESafterDelay:1];
        }
    }];
     //下载完成的事件该方法会在下载完成后延迟 2秒左右执行 根据完成后需要处理的及时性不高,可以采用该方法
    [operation setCompletionBlock:^{
        //        NSLog(@"自然人凭证下载接口下载完成 ");
    }];
    [operation start];