转自:http://www.maxiaoguo.com/clothes/269.html

AFNetworking是一个轻量级的iOS网络通信类库。它建立在NSURLConnection和NSOperation等类库的基础上,让非常多网络通信功能的实现变得十分简单。它支持HTTP请求和基于REST的网络服务(包含GET、POST、 PUT、DELETE等)。支持ARC。

Github地址:https://github.com/AFNetworking/AFNetworking
//
//  MJViewController.m
//  03.AFN演练
//
//  Created by apple on 14-4-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//#import "MJViewController.h"
#import "AFNetworking.h"@interface MJViewController ()@end@implementation MJViewController
/**要使用常规的AFN网络訪问1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];全部的网络请求,均有manager发起2. 须要注意的是,默认提交请求的数据是二进制的,返回格式是JSON1> 假设提交数据是JSON的,须要将请求格式设置为AFJSONRequestSerializer2> 假设返回格式不是JSON的,3. 请求格式AFHTTPRequestSerializer            二进制格式AFJSONRequestSerializer            JSONAFPropertyListRequestSerializer    PList(是一种特殊的XML,解析起来相对easy)4. 返回格式AFHTTPResponseSerializer           二进制格式AFJSONResponseSerializer           JSONAFXMLParserResponseSerializer      XML,仅仅能返回XMLParser,还须要自己通过代理方法解析AFXMLDocumentResponseSerializer (Mac OS X)AFPropertyListResponseSerializer   PListAFImageResponseSerializer          ImageAFCompoundResponseSerializer       组合*/- (void)viewDidLoad
{[super viewDidLoad];[self reach];
}#pragma mark - 演练
#pragma mark - 检測网络连接
- (void)reach
{/**AFNetworkReachabilityStatusUnknown          = -1,  // 未知AFNetworkReachabilityStatusNotReachable     = 0,   // 无连接AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3G 花钱AFNetworkReachabilityStatusReachableViaWiFi = 2,   // 局域网络,不花钱*/// 假设要检測网络状态的变化,必须用检測管理器的单例的startMonitoring[[AFNetworkReachabilityManager sharedManager] startMonitoring];// 检測网络连接的单例,网络变化时的回调方法[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {NSLog(@"%d", status);}];
}#pragma mark - Session 下载
- (void)sessionDownload
{NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:config];NSString *urlString = @"http://localhost/itcast/videos/01.C语言-语法预览.mp4";urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlString];NSURLRequest *request = [NSURLRequest requestWithURL:url];NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {// 指定下载文件保存的路径
//        NSLog(@"%@ %@", targetPath, response.suggestedFilename);// 将下载文件保存在缓存路径中NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];NSString *path = [cacheDir stringByAppendingPathComponent:response.suggestedFilename];// URLWithString返回的是网络的URL,假设使用本地URL,须要注意NSURL *fileURL1 = [NSURL URLWithString:path];NSURL *fileURL = [NSURL fileURLWithPath:path];NSLog(@"== %@ |||| %@", fileURL1, fileURL);return fileURL;} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {NSLog(@"%@ %@", filePath, error);}];[task resume];
}#pragma mark - POST JSON
- (void)postJSON
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];NSDictionary *dict = @{@"name": @"zhangsan"};NSDictionary *dict1 = @{@"name": @"wangwu"};NSArray *array = @[dict, dict1];// 设置请求格式manager.requestSerializer = [AFJSONRequestSerializer serializer];// 设置返回格式manager.responseSerializer = [AFHTTPResponseSerializer serializer];[manager POST:@"http://localhost/postjson.php" parameters:array success:^(AFHTTPRequestOperation *operation, id responseObject) {NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"%@", result);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {}];}#pragma mark - 随机文件名称上传
- (void)postUpload1
{// 本地上传给server时,没有确定的URL,不好用MD5的方式处理AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.responseSerializer = [AFHTTPResponseSerializer serializer];[manager POST:@"http://localhost/demo/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];// 要上传保存在server中的名称// 使用时间来作为文件名称 2014-04-30 14:20:57.png// 让不同的用户信息,保存在不同文件夹中NSDateFormatter *formatter = [[NSDateFormatter alloc] init];// 设置日期格式formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";NSString *fileName = [formatter stringFromDate:[NSDate date]];[formData appendPartWithFileURL:fileURL name:@"uploadFile" fileName:fileName mimeType:@"image/png" error:NULL];} success:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"OK");} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"error");}];
}#pragma mark - POST上传
- (void)postUpload
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];// AFHTTPResponseSerializer就是正常的HTTP请求响应结果:NSData// 当请求的返回数据不是JSON,XML,PList,UIImage之外,使用AFHTTPResponseSerializer// 比如返回一个html,text...//// 实际上就是AFN没有对响应数据做不论什么处理的情况manager.responseSerializer = [AFHTTPResponseSerializer serializer];// formData是遵守了AFMultipartFormData的对象[manager POST:@"http://localhost/demo/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {// 将本地的文件上传至serverNSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];[formData appendPartWithFileURL:fileURL name:@"uploadFile" error:NULL];} success:^(AFHTTPRequestOperation *operation, id responseObject) {NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"完毕 %@", result);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"错误 %@", error.localizedDescription);}];
}#pragma mark - JSON
- (void)XMLData
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];// 返回的数据格式是XMLmanager.responseSerializer = [AFXMLParserResponseSerializer serializer];NSDictionary *dict = @{@"format": @"xml"};// 网络訪问是异步的,回调是主线程的,因此程序猿不用管在主线程更新UI的事情[manager GET:@"http://localhost/videos.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {// 假设结果是XML,相同须要使用6个代理方法解析,或者使用第三方库// 第三方库第三方框架,效率低,内存泄漏NSLog(@"%@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];
}#pragma mark - JSON
- (void)JSONData
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];// 原本须要拼接get訪问URL ?

& = NSDictionary *dict = @{@"format": @"json"}; // 网络訪问是异步的,回调是主线程的,因此程序猿不用管在主线程更新UI的事情 [manager GET:@"http://localhost/videos.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@", responseObject); // 提问:NSURLConnection异步方法回调,是在子线程 // 得到回调之后,通常更新UI,是在主线程 NSLog(@"%@", [NSThread currentThread]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", error); }]; } #pragma mark - POST登录 - (void)postLogin { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 原本须要拼接get訪问URL ?

& = NSDictionary *dict = @{@"username": @"wangwu", @"password" : @"wang"}; // 网络訪问是异步的,回调是主线程的,因此程序猿不用管在主线程更新UI的事情 [manager POST:@"http://localhost/login.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@", responseObject); // 提问:NSURLConnection异步方法回调,是在子线程 // 得到回调之后,通常更新UI,是在主线程 NSLog(@"%@", [NSThread currentThread]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", error); }]; } #pragma mark - GET登录 - (void)getLogin { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 原本须要拼接get訪问URL ? & = NSDictionary *dict = @{@"username": @"wangwu", @"password" : @"wang"}; // 网络訪问是异步的,回调是主线程的,因此程序猿不用管在主线程更新UI的事情 [manager GET:@"http://localhost/login.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@", responseObject); // 提问:NSURLConnection异步方法回调,是在子线程 // 得到回调之后,通常更新UI,是在主线程 NSLog(@"%@", [NSThread currentThread]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", error); }]; } @end

AFNetwork 作用和使用方法具体解释相关推荐

  1. IP地址子网掩码位数换算方法及解释子网掩码的作用

    IP地址子网掩码位数换算方法及解释子网掩码的作用 子网位 /主机位 子网掩码 子网最大数 /主机最大数 2 /22 /10 | 255.192.0.0 2 /4194302 3 /21 /11 | 2 ...

  2. c语言 定时器作用,单片机定时器的作用及使用方法详解

    单片机定时器的作用及使用方法详解 单片机定时器在单片机的功能是很重要的,它一般被用作定时功能,来做定时检测.定时响应和定时控制,并且可以产生毫秒宽的脉冲信号来驱动步进电机.计时和计数的最终功能是通过计 ...

  3. vue子组件mounted不执行_vue 路由子组件created和mounted不起作用的解决方法

    vue 路由子组件created和mounted不起作用的解决方法 判断项目是否启用keep-alive 启用 使用exclude排除组件(我没有成功不知道为什么) 使用v-if判断(成功解决) 可以 ...

  4. ios10 safari浏览器 在touchmove 里面写e.preventDefault(); 不起作用 的解决方法

    ios10 safari浏览器 在touchmove 里面写e.preventDefault(); 不起作用 的解决方法 参考文章: (1)ios10 safari浏览器 在touchmove 里面写 ...

  5. hive-0.11.0安装方法具体解释

    先决条件:     1)java环境,须要安装java1.6以上版本号     2)hadoop环境,Hadoop-1.2.1的安装方法參考 hadoop-1.2.1安装方法具体解释 本文採用的had ...

  6. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

  7. Python之pyc文件作用及生成方法

    Python之pyc文件作用及生成方法_宗而研之的博客-CSDN博客 1 什么是pyc 首先了解下python的运行机制及特性:当我们运行python文件程序的时候,Python解释器将源码转换为字节 ...

  8. 荒野求生一直获取服务器信息,荒野求生各资源作用及获取方法

    关于资源作用及获取方法! 1.木材:作用最大的资源,没有木材你将难以生存. 作用:烧制食物;蒸馏淡水;升级或建造建筑;制造武器;生火;烧制木炭等. 获取方式:砍伐海滩椰子树;砍伐雨林乔木;砍伐松木林松 ...

  9. 荒岛求生html5母狼攻,荒岛求生各资源作用及获取方法详解

    荒岛求生各资源作用及获取方法详解 2018-03-06 13:45:22来源:游戏下载编辑:野狐禅评论(0) 荒岛求生地图中有很多资源可以获取,它们各有什么作用呢?下面就为大家带来荒岛求生资源作用及获 ...

  10. 荒岛求生html5母狼攻,荒岛求生各资源作用及获取方法解析 荒岛求生资源怎么获得...

    荒岛求生地图中有很多资源可以获取,它们各有什么作用呢?下面为大家带来荒岛求生各资源作用及获取方法解析,还不清楚的玩家一起来看看吧. 荒岛求生各资源作用及获取方法解析 1.木材:作用最大的资源,没有木材 ...

最新文章

  1. 【C/C++】排序算法
  2. python查询文件软件_Python小工具--多文件查找字符串fs
  3. EasyNVR摄像机网页无插件直播方案H5前端构建之:关于接口调用常见的一些问题(401 Unauthorized)...
  4. svchost占用内存过高_是什么导致你的Java服务器内存和CPU占用过高呢
  5. 2021抖音电商达人生态报告
  6. 全球研发投入榜:中国第二逼近美国,以色列最下血本 | 联合国数据
  7. 雅马哈AI系统能自动为舞蹈配乐,跟节奏跳舞时代已不再
  8. c3p0三种配置方式(automaticTestTable)
  9. 从二分逼近领略计算科学的魅力
  10. 网页设计(二)——HTML与BOX
  11. SECS/GEM如何开发
  12. 如何删除Windows创建的虚拟磁盘
  13. WiFi语音智能家居控制系统(一)
  14. 戴尔 微博 服务器 销售,微博营销案例之戴尔
  15. 目前NAXX所用到的一些BUFF和药水
  16. OutMan——Foundation框架中的常用结构体、NSNumber类和NSValue类
  17. 游戏服务器 配置文件,游戏服务器应用配置文件
  18. 【产业互联网周报】高盛上调阿里云估值至1238亿美元;腾讯云入选Gartner全球云计算IaaS和PaaS魔力象限...
  19. X86实模式与保护模式简介
  20. 互联网创业的准备——架构

热门文章

  1. Google docs/slides的下载
  2. python 矩阵点乘_Python之Numpy库基础——矩阵运算
  3. 滁州2021年高考成绩查询时间,安徽2021中考时间表安排 滁州2021年中考时间考点公布...
  4. python短视频教程_Python技巧:10万+的短视频被批量生产了,Python表示不服
  5. php 怎么写配置文件,在PHP中如何把数组写成配置文件
  6. java .class的作用_Java中Class类的作用与深入理解
  7. js中点与方括号及for...in
  8. hibernate 入门案例
  9. 如何让textarea不可拖拽变化大小
  10. 使用Water-Scrum-Fall交付软件