zoukankan      html  css  js  c++  java
  • 第三方类AFNetworking

    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网络监测

     1 #import "ViewController.h"
     2 // 网络请求的头文件
     3 #import <AFNetworking.h>
     4 @interface ViewController ()
     5 {
     6     /// 进行网络监测判断的BOOL值
     7     BOOL isOpen;
     8 }
     9 @end
    10 
    11 @implementation ViewController
    12 
    13 - (void)viewDidLoad {
    14     [super viewDidLoad];
    15     
    16 }
    17 
    18 #pragma mark - 实时监测当前网络状态
    19 - (IBAction)networkMonitoringAction:(id)sender {
    20     if (!isOpen) {
    21         // 打开网络监测
    22         [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    23         isOpen = YES;
    24     } else {
    25         // 关闭网络监测
    26         [[AFNetworkReachabilityManager sharedManager] stopMonitoring];
    27         isOpen = NO;
    28     }
    29     // 判断当前是wifi状态、3g、4g还是网络不可用状态
    30     [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    31         /**
    32          AFNetworkReachabilityStatusUnknown          = -1,  // 未知网络
    33          AFNetworkReachabilityStatusNotReachable     = 0,   // 没有网络连接
    34          AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3g,4g
    35          AFNetworkReachabilityStatusReachableViaWiFi = 2,   // WIFI状态
    36          */
    37         switch (status) {
    38             case AFNetworkReachabilityStatusUnknown:
    39                 NSLog(@"当前网络处于未知状态");
    40                 break;
    41             case AFNetworkReachabilityStatusNotReachable:
    42                 NSLog(@"当前没有网络连接");
    43                 break;
    44             case AFNetworkReachabilityStatusReachableViaWiFi:
    45                 NSLog(@"当前处于WIFI状态");
    46                 break;
    47             case AFNetworkReachabilityStatusReachableViaWWAN:
    48                 NSLog(@"当前处于移动网络状态,请您注意您的流量");
    49                 break;
    50             default:
    51                 break;
    52         }
    53     }];
    54     
    55 }

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

     1 #import "ViewController.h"
     2 // 网络请求的头文件
     3 #import <AFNetworking.h>
     4 #import <AFNetworkActivityIndicatorManager.h>
     5 @interface ViewController ()
     6 /// 用于网络请求的session对象
     7 @property (nonatomic, strong) AFHTTPSessionManager *session;
     8 
     9 @end
    10 
    11 @implementation ViewController
    12 
    13 - (void)viewDidLoad {
    14     [super viewDidLoad];
    15     // 单例 初始化session对象
    16     self.session = [AFHTTPSessionManager manager];
    17     // 设置请求返回支持的文件类型
    18     self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil];
    19 
    20     // 转圈圈的菊花默认是关闭的,需要手动打开,在网络慢的情况下请求数据时,手机左上角就会出现转圈圈的菊花
    21     [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
    22 }
    23 
    24 #pragma mark - get网络请求
    25 - (IBAction)getRequestAction:(id)sender {
    26     /**
    27      参数1:get请求的网址
    28      参数2:拼接的参数,get请求不需要
    29      参数3:当前进度,下载时常用,block传进来的参数downloadProgress就是下载进度
    30      参数4:请求成功时调用的block,responseObject是请求到的数据
    31      参数5:请求失败时调用的block
    32      */
    33     [self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
    34         NSLog(@"下载进度");
    35     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    36         // 打印请求到的数据
    37         NSLog(@"请求成功%@", responseObject);
    38        // 解析数据代码写在这里
    39     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    40         NSLog(@"请求失败");
    41     }];
    42 }
    43 #pragma mark - post网络请求(表单上传)
    44 - (IBAction)postRequestAction:(id)sender {
    45     // body体
    46     /*{
    47      do = "pri_memberlist";
    48      "member_id" = zpHr2dsRvQQxYJxo2;
    49      "workspace_id" = ILfYpE4Dhs2gWcuQx;
    50      }*/
    51     
    52     /**
    53      参数1:post请求的网址
    54      参数2:拼接的body体
    55      参数3:当前上传进度,block传进来的参数uploadProgress就是上传进度
    56      参数4:请求成功时调用的block,responseObject是请求到的数据
    57      参数5:请求失败时调用的block
    58      */
    59     NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php";
    60     NSMutableDictionary *dataDic = [NSMutableDictionary dictionary];
    61     [dataDic setValue:@"pri_memberlist" forKey:@"do"];
    62     [dataDic setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
    63     [dataDic setValue:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"];
    64     
    65     [self.session POST:urlStr parameters:dataDic progress:^(NSProgress * _Nonnull uploadProgress) {
    66         NSLog(@"上传进度");
    67     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    68         NSLog(@"请求成功%@", responseObject);
    69         // 解析数据代码写在这里
    70     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    71         NSLog(@"请求失败");
    72     }];
    73 }   
  • 相关阅读:
    手写vite
    单点登录的实现原理
    vue中和react中key的用法
    手写MVVM
    rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台
    博图TIA中ModbusRTU_CRC校验程序的实现
    博图TIA中ModbusRTU Over TCP/IP通讯的实现
    webpack之file-loader和url-loader的区别
    Webpack中Loader和Plugin的区别?编写Loader,Plugin的思路?
    spark-sql 与hive 常用函数
  • 原文地址:https://www.cnblogs.com/fearlessyyp/p/5536014.html
Copyright © 2011-2022 走看看