官方建议AFN的使用方法
1. 定义一个全局的AFHttpClient:包含有html
1> baseURL安全
2> 请求网络
3> 操做队列 NSOperationQueue多线程
2. 由AFHTTPRequestOperation负责全部的网络操做请求app
#import "SSZipArchive.h"框架
4. 修改xxx-Prefix.pch文件post
#import <MobileCoreServices/MobileCoreServices.h>优化
#import <SystemConfiguration/SystemConfiguration.h>网站
1 #import "ViewController.h"
2 #import "AFNetworking.h"
3 #import "SSZipArchive.h"
4
5 @interface ViewController () 6 { 7 // AFN的客户端,使用基本地址初始化,同时会实例化一个操做队列,以便于后续的多线程处理
8 AFHTTPClient *_httpClient; 9
10 // 下载操做
11 AFHTTPRequestOperation *_downloadOperation; 12
13 NSOperationQueue *_queue; 14 } 15
//下载进度条显示
16 @property (weak, nonatomic) IBOutlet UIProgressView *progressView; 17
18 @end
19
20 @implementation ViewController 21 /*
22 关于文件下载,在Documents中保存的文件,必定是要应用程序产生的文件或者数据 23 没有明显提示用户下载到本地的文件不能保存在Docuemnts中! 24
25
26 */
27
28 - (void)viewDidLoad 29 { 30 [super viewDidLoad]; 31
32 NSURL *url = [NSURL URLWithString:@"http://192.168.3.251/~apple/itcast"]; 33 _httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 34
35 _queue = [[NSOperationQueue alloc] init]; 36 }
1 #pragma mark 下载
2 - (IBAction)download 3 { 4 // 1. 创建请求
5 NSURLRequest *request = [_httpClient requestWithMethod:@"GET" path:@"download/Objective-C2.0.zip" parameters:nil]; 6
7 // 2. 操做
8 AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 9
10 _downloadOperation = op; 11
12 // 下载 13 // 指定文件保存路径,将文件保存在沙盒中
14 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 15 NSString *path = [docs[0] stringByAppendingPathComponent:@"download.zip"]; 16
17 op.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; 18
19 // 设置下载进程块代码
20 /*
21 bytesRead 当前一次读取的字节数(100k) 22 totalBytesRead 已经下载的字节数(4.9M) 23 totalBytesExpectedToRead 文件总大小(5M) 24 */
25 [op setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 26
27 // 设置进度条的百分比
28 CGFloat precent = (CGFloat)totalBytesRead / totalBytesExpectedToRead; 29 NSLog(@"%f", precent); 30
31 _progressView.progress = precent; 32 }]; 33
34 // 设置下载完成操做
35 [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 36
37 // 下载完成以后,解压缩文件
38 /*
39 参数1:要解结压缩的文件名及路径 path - > download.zip 40 参数2:要解压缩到的位置,目录 - > document目录 41 */
42 [SSZipArchive unzipFileAtPath:path toDestination:docs[0]]; 43
44 // 解压缩以后,将原始的压缩包删除 45 // NSFileManager专门用于文件管理操做,能够删除,复制,移动文件等操做 46 // 也能够检查文件是否存在
47 [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; 48
49 // 下一步能够进行进一步处理,或者发送通知给用户。
50 NSLog(@"下载成功"); 51 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 52 NSLog(@"下载失败"); 53 }]; 54
55 // 启动下载
56 [_httpClient.operationQueue addOperation:op]; 57 }
1 - (IBAction)pauseResume:(id)sender 2 { 3 // 关于暂停和继续,AFN中的数据不是线程安全的 4 // 若是使用操做的暂停和继续,会使得数据发生混乱 5 // 不建议使用此功能。 6 // 有关暂停和后台下载的功能,NSURLSession中会介绍。
7 if (_downloadOperation.isPaused) { 8 [_downloadOperation resume]; 9 } else { 10 [_downloadOperation pause]; 11 } 12 }
1 #pragma mark 检测网路状态
2 /*
3 AFNetworkReachabilityStatusUnknown = -1, 未知 4 AFNetworkReachabilityStatusNotReachable = 0, 未链接 5 AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G 6 AFNetworkReachabilityStatusReachableViaWiFi = 2, 无线链接 7 */
8 - (IBAction)checkNetwork:(id)sender 9 { 10 // 1. AFNetwork 是根据是否可以链接到baseUrl来判断网络链接状态的 11 // 提示:最好使用门户网站来判断网络链接状态。
12 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; 13
14 AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url]; 15 _httpClient = client; 16
17 [_httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 18
19 // 之因此区分无线和3G主要是为了替用户省钱,省流量 20 // 若是应用程序占流量很大,必定要提示用户,或者提供专门的设置,仅在无线网络时使用!
21 switch (status) { 22 case AFNetworkReachabilityStatusReachableViaWiFi: 23 NSLog(@"无线网络"); 24 break; 25 case AFNetworkReachabilityStatusReachableViaWWAN: 26 NSLog(@"3G网络"); 27 break; 28 case AFNetworkReachabilityStatusNotReachable: 29 NSLog(@"未链接"); 30 break; 31 case AFNetworkReachabilityStatusUnknown: 32 NSLog(@"未知错误"); 33 break; 34 } 35 }]; 36 }
· AFNetworking3.0+ (最新AFN) 版本使用方法能够看我最新的日志:atom
做者: 清澈Saup
出处: http://www.cnblogs.com/qingche/
本文版权归做者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文链接。