1、AFNetworking简介

AFNetworking是一个在iOS开发中使用非常多的轻量级网络开源库
适用于iOS以及Mac OS X。它构建于在(Apple iOS开发文档) NSURLConnection ,  NSOperation , 以及其他熟悉的Foundation技术之上。
它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松。
官方链接http://cocoadocs.org/docsets/AFNetworking/1.3.0/

2、AFNetworking使用(使用CocoaPods管理)

2.1网络监测

 #import "ViewController.h"
// 网络请求的头文件
#import <AFNetworking.h>
@interface ViewController ()
{
/// 进行网络监测判断的BOOL值
BOOL isOpen;
}
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; } #pragma mark - 实时监测当前网络状态
- (IBAction)networkMonitoringAction:(id)sender {
if (!isOpen) {
// 打开网络监测
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
isOpen = YES;
} else {
// 关闭网络监测
[[AFNetworkReachabilityManager sharedManager] stopMonitoring];
isOpen = NO;
}
// 判断当前是wifi状态、3g、4g还是网络不可用状态
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
/**
AFNetworkReachabilityStatusUnknown = -1, // 未知网络
AFNetworkReachabilityStatusNotReachable = 0, // 没有网络连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3g,4g
AFNetworkReachabilityStatusReachableViaWiFi = 2, // WIFI状态
*/
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"当前网络处于未知状态");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"当前没有网络连接");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"当前处于WIFI状态");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"当前处于移动网络状态,请您注意您的流量");
break;
default:
break;
}
}]; }

2.2 Get、Post请求,网络加载时"菊花"的设置

 #import "ViewController.h"
// 网络请求的头文件
#import <AFNetworking.h>
#import <AFNetworkActivityIndicatorManager.h>
@interface ViewController ()
/// 用于网络请求的session对象
@property (nonatomic, strong) AFHTTPSessionManager *session; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// 单例 初始化session对象
self.session = [AFHTTPSessionManager manager];
// 设置请求返回支持的文件类型
self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil]; // 转圈圈的菊花默认是关闭的,需要手动打开,在网络慢的情况下请求数据时,手机左上角就会出现转圈圈的菊花
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
} #pragma mark - get网络请求
- (IBAction)getRequestAction:(id)sender {
/**
参数1:get请求的网址
参数2:拼接的参数,get请求不需要
参数3:当前进度,下载时常用,block传进来的参数downloadProgress就是下载进度
参数4:请求成功时调用的block,responseObject是请求到的数据
参数5:请求失败时调用的block
*/
[self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"下载进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 打印请求到的数据
NSLog(@"请求成功%@", responseObject);
// 解析数据代码写在这里
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败");
}];
}
#pragma mark - post网络请求(表单上传)
- (IBAction)postRequestAction:(id)sender {
// body体
/*{
do = "pri_memberlist";
"member_id" = zpHr2dsRvQQxYJxo2;
"workspace_id" = ILfYpE4Dhs2gWcuQx;
}*/ /**
参数1:post请求的网址
参数2:拼接的body体
参数3:当前上传进度,block传进来的参数uploadProgress就是上传进度
参数4:请求成功时调用的block,responseObject是请求到的数据
参数5:请求失败时调用的block
*/
NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php";
NSMutableDictionary *dataDic = [NSMutableDictionary dictionary];
[dataDic setValue:@"pri_memberlist" forKey:@"do"];
[dataDic setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
[dataDic setValue:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"]; [self.session POST:urlStr parameters:dataDic progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"上传进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"请求成功%@", responseObject);
// 解析数据代码写在这里
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败");
}];
}

第三方类AFNetworking的更多相关文章

  1. tp框架之分页与第三方类的应用

    1.先把分页类放在根目录下,比如放在某个模块下 2.在类里面写入命名空间,注意类名的格式(类名要与里面的方法名一致) 3.在需要的方法里面按照路径进行实例化,然后就可以使用了 方法: public f ...

  2. ajax的使用:(ajaxReturn[ajax的返回方法]),(eval返回字符串);分页;第三方类(page.class.php)如何载入;自动加载函数库(functions);session如何防止跳过登录访问(构造函数说明)

    一.ajax例子:ajaxReturn("ok","eval")->thinkphp中ajax的返回值的方法,返回参数为ok,返回类型为eval(字符串) ...

  3. ThinkPHP讲解(十)——第三方类的引入:以分页为主

    第三方类的引入,以分页类为例: 1.在控制器里新建一个分页的操作方法FenYe() 注意:第三方类Page.class.php放在Think或Home文件夹下,并新近一个文件夹,放在里面,并在其类里加 ...

  4. Thinkphp 零散知识点(caa/js路径,引入第三方类,ajax返回,session/cookie)

    一.关于JS和CSS路径问题 1.找路径是从入口文件index.php来找的,而不是从文件本身所在位置来找, 因为我们访问时是访问的入口文件 2.在存放JS和CSS的时候可以放到public文件夹下 ...

  5. TP框架 命名空间 与第三方类

    命名空间 相当于虚拟目录 所有类文件都放在虚拟目录 功能:实现自动加载类 TP框架的命名空间要更复杂 内容=> 命名空间中定义和使用 都用\1初始命名空间 相当于 根目录 如:Library文件 ...

  6. tp5引用第三方类vendor或extend(多种方法)

    extend 方法一:命名空间引入 我们只需要把自己的类库包目录放入EXTEND_PATH目录(默认为extend,可配置),就可以自动注册对应的命名空间,例如: 我们在extend目录下面新增一个l ...

  7. 第三方库AFNetworking 3.1.0的简单使用

    AFNetworking是一个 在iOS开发中 使用非常多网络开源库.它是一个轻量级的网络请求API类库. 适用于iOS以及Mac OS X.它构建于在(Apple iOS开发文档) NSURLCon ...

  8. laravel 5.2 引入第三方类

    composer 安装类依赖包 很受用 也很方便 但是要是一个有一定规模的公司技术团队 因为要照顾大局 还是引入类好些 下面是引入类的方法 1.首先在app目录下创建一个新的文件夹,命名Tools(可 ...

  9. 基于MFC与第三方类CWebPage的百度地图API开发范例

    在进行百度地图API开发之前你需要到http://developer.baidu.com/map申请密匙 密匙申请之后就可以进行百度地图API的开发了. 下面我们以在visual c++6.0里进行地 ...

随机推荐

  1. 宏ut_2pow_round

    计算 m的整数倍 不大于n #define ut_2pow_round(n, m) ((n) & ~((m) - 1)) #include <stdio.h>#include &l ...

  2. Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net

    Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...

  3. BZOJ_1029_[JSOI2007]_建筑抢修_(贪心+优先队列)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1029 \(n\)个任务需要完成,给出每个任务所需时间\(t_1\)与deadline\(t_2 ...

  4. UVA 568 Just the Facts (水)

    题意: 求一个数n的阶乘,其往后数第1个不是0的数字是多少. 思路: [1,n]逐个乘,出现后缀0就过滤掉,比如12300就变成123,继续算下去.为解决爆long long问题,将其余一个数mod, ...

  5. Java [Leetcode 204]Count Primes

    题目描述: Description: Count the number of prime numbers less than a non-negative number, n. 解题思路: Let's ...

  6. ffmpeg 从内存中读取数据(或将数据输出到内存)

    更新记录(2014.7.24): 1.为了使本文更通俗易懂,更新了部分内容,将例子改为从内存中打开. 2.增加了将数据输出到内存的方法. 从内存中读取数据 ffmpeg一般情况下支持打开一个本地文件, ...

  7. 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)

    本文记录OpenGL播放视频的技术.上一篇文章中,介绍了一种简单的使用OpenGL显示视频的方式.但是那还不是OpenGL显示视频技术的精髓.和Direct3D一样,OpenGL更好的显示视频的方式也 ...

  8. 多线程程序设计学习(3)immutable pattern模式

    Immutable pattern[坚不可摧模式] 一:immutable pattern的参与者--->immutable(不变的)参与者        1.1:immutable参与者是一个 ...

  9. Android开发中常见的设计模式

    对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...

  10. android bin目录下的.ap_是神马文件?

    resources.ap_ resources翻译过来是资源的意思 应该就是一种中间文件,可以改成rar.zip等压缩文件的类型,里面包含res.AndroidMainfest.xml.resourc ...