当前位置: 首页 > news >正文

【iOS】使用AFNetworking进行网络请求

文章目录

  • 前言
  • AFNetworking
    • AFNetworking 的核心组件
    • AKNetworking库的常用方法
    • 使用AKNetworking进行网络请求的步骤和代码示例
  • 总结

前言

  在暑假写天气预报项目时,我们已经接触到网络请求,当时我们是使用URLSession类,即Foundation框架中用于管理和配置网络连接的API,来完成对实时天气预报数据的请求,现在我们来学习一种更方便的网络请求方式——使用一个单例通过AFNetworking来实现网络请求。

AFNetworking

  AFNetworking 是一个开源的网络库,它基于 NSURLSession,为 iOS、macOS、watchOS 和 tvOS 应用程序开发提供了强大的网络请求功能。AFNetworking 通过简单的 API 设计,使得开发者可以轻松地处理 HTTP 请求,包括 GET、POST、PUT、DELETE 等操作。它还支持文件上传、下载、自动处理 HTTP 缓存、自定义缓存策略、安全性设置等高级特性。

由此来看,AKNetworking库兼容了我们之前使用URLSession类来进行网络请求的方法。使用这个库可以简化我们进行网络请求的代码,在使用前记得下载cocoapods然后将该库安装到对应的文档里。

AFNetworking 的核心组件

AFHTTPSessionManager:这是最常用的类,用于处理 HTTP 请求。它基于 NSURLSession,可以发送网络请求和处理响应。
AFURLSessionManager:同样基于 NSURLSession,用于管理下载、上传等任务。
AFNetworkReachabilityManager:用于监控网络状态的变化,帮助开发者了解当前的网络连接情况。
序列化和反序列化:AFNetworking 自动解析响应的数据格式,如 JSON、XML、图片等,并且支持自定义序列化和反序列化操作。

AKNetworking库的常用方法

  1. AFHTTPSessionManager:这是最常用的类,用于处理 HTTP 请求。它基于 NSURLSession,可以发送网络请求和处理响应。

  2. GET 请求:使用 GET 方法发送请求,可以传递参数字典,并且在请求成功或失败时提供回调。

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    NSDictionary *parameters = @{@"key": @"value"};
    [manager GET:@"http://example.com/api" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {NSLog(@"Success: %@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {NSLog(@"Error: %@", error);
    }];
    
  3. POST 请求:使用 POST 方法发送请求,同样可以传递参数字典,并在请求成功或失败时提供回调。

    [manager POST:@"http://example.com/api" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {NSLog(@"Success: %@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {NSLog(@"Error: %@", error);
    }];
    
  4. 文件上传:AFNetworking 支持文件上传,并且可以监控上传进度。

    NSURL *fileURL = [NSURL fileURLWithPath:@"path/to/file"];
    [manager POST:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {[formData appendPartWithFileURL:fileURL name:@"file" fileName:@"filename" mimeType:@"file mimeType"];
    } progress:^(NSProgress *uploadProgress) {NSLog(@"Upload Progress: %@%", uploadProgress.fractionCompleted);
    } success:^(NSURLSessionDataTask *task, id responseObject) {NSLog(@"Success: %@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {NSLog(@"Error: %@", error);
    }];
    
  5. 文件下载:AFNetworking 也支持文件下载,并且可以指定下载进度和完成时的回调。

    NSURL *fileURL = [NSURL URLWithString:@"http://example.com/file"];
    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:[NSURLRequest requestWithURL:fileURL] progress:^(NSProgress *downloadProgress) {NSLog(@"Download Progress: %@%", downloadProgress.fractionCompleted);
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {return [NSURL fileURLWithPath:@"path/to/save/file"];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {if (error) {NSLog(@"Download Error: %@", error);} else {NSLog(@"Download Success: %@", filePath);}
    }];
    [downloadTask resume];
    
  6. 网络状态监控:使用 AFNetworkReachabilityManager 可以监控网络状态的变化。

    AFNetworkReachabilityManager *reachabilityManager = [AFNetworkReachabilityManager sharedManager];
    [reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {switch (status) {case AFNetworkReachabilityStatusReachableViaWiFi:NSLog(@"Reachable via WiFi");break;case AFNetworkReachabilityStatusReachableViaWWAN:NSLog(@"Reachable via WWAN");break;case AFNetworkReachabilityStatusNotReachable:NSLog(@"Not reachable");break;}
    }];
    [reachabilityManager startMonitoring];
    
  7. 响应序列化:AFNetworking 提供了多种响应序列化器,如 AFJSONResponseSerializerAFXMLParserResponseSerializer 等,用于自动解析服务器返回的数据。

  8. 单例模式:在实际应用中,通常会将 AFNetworking 封装在单例类中,以便在整个应用中统一管理和使用网络请求。

  9. 缓存机制:AFNetworking 支持内存缓存和磁盘缓存,可以配置缓存策略来提高应用性能和用户体验 。

  10. HTTPS 和 SSL/TLS 支持:AFNetworking 支持 HTTPS 请求,并且可以配置 SSL/TLS 证书,以确保数据传输的安全性 。

  11. 响应式布局和动态请求:可以根据不同的设备和屏幕尺寸动态调整请求参数,以适应不同的设备和屏幕尺寸 。

  12. 复合响应序列化AFCompoundResponseSerializer 允许同时使用多个响应序列化器,这在处理复杂或混合格式的响应时非常有用。

  13. 图片加载和处理AFImageResponseSerializer 不仅可以处理图片的下载,还可以进行图片的解压和缓存,以提高图片显示的性能 。

  14. 错误处理和重试机制:AFNetworking 提供了丰富的错误处理机制,你可以设置重试策略,以应对网络不稳定或服务器错误的情况。

使用AKNetworking进行网络请求的步骤和代码示例

引入 AFNetworking:通过 CocoaPods 或其他依赖管理工具将 AFNetworking 添加到项目中。

创建 AFHTTPSessionManager 实例:这个实例将用于发起网络请求。

配置请求和响应序列化器:AFNetworking 提供了多种序列化器,如 AFJSONRequestSerializer 和 AFJSONResponseSerializer,用于处理 JSON 格式的数据。

发起网络请求:使用 GET、POST 等方法发起网络请求,并在回调中处理响应数据。

处理响应和错误:在回调中,你可以获取到响应数据,并根据需要进行处理。

// 创建 AFHTTPSessionManager 实例
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];// 设置请求和响应序列化器
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];// 发起 GET 请求
[manager GET:@"https://example.com/api/resource" parameters:nil progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {// 请求成功的回调NSLog(@"Response: %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {// 请求失败的回调NSLog(@"Error: %@", error);
}];

总结

  AFNetworking 作为一个开源库,简化了网络请求的过程,相比于之前使用xcode自带的URLSession类来进行网络请求便利许多,在后续写项目的过程中有时应该会更加明显。

相关文章:

【iOS】使用AFNetworking进行网络请求

文章目录 前言AFNetworkingAFNetworking 的核心组件AKNetworking库的常用方法使用AKNetworking进行网络请求的步骤和代码示例 总结 前言 在暑假写天气预报项目时&#xff0c;我们已经接触到网络请求&#xff0c;当时我们是使用URLSession类&#xff0c;即Foundation框架中用于管…...

ThingsBoard规则链节点:RPC Call Reply节点详解

引言 1. RPC Call Reply 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 设备控制 3.2 状态查询 3.3 命令执行 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备管理…...

【AI换装整合包及教程】OOTDiffusion:以AI技术引领的时尚换装革命

在当今数字化快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活。从智能家居到自动驾驶&#xff0c;从在线教育到虚拟现实&#xff0c;AI的应用范围正在不断扩展。而在时尚领域&#xff0c;一款名为OOTDiffusion&#xff0…...

排序算法详细总结

算法 定义&#xff1a;算法是解决特定问题的明确步骤集合。算法的效率通常用时间复杂度和空间复杂度来衡量。 排序算法 定义&#xff1a;排序算法是计算机科学中用于对元素序列进行排序的一系列算法。排序算法在各种应用中都非常常见&#xff0c;从简单的数据处理到复杂的数…...

uniapp MD5加密

安装&#xff1a; npm install js-md5 -D 引入&#xff1a; import Md5 from js-md5 需求加密一个对象&#xff0c; login_form: {openId: 123456789,phone: ,scenario: 656677,phoneSessionKey: ,openIdSessionKey: ,timeStamp: , }, //10位时间戳&#xff08;秒&#xff09;…...

提升视觉回归测试体验:Cypress 插件推荐

项目介绍 在现代前端开发中&#xff0c;视觉回归测试是确保用户界面在不同版本之间保持一致性的关键步骤。然而&#xff0c;传统的视觉回归测试工具往往复杂且难以使用。为了解决这一问题&#xff0c;我们推荐一款专为 Cypress 设计的插件&#xff1a;Cypress Plugin Visual Re…...

fastbootd模式刷android固件的方法

1. fastbootd追根溯源 Google在Android 10上正式引入了动态分区机制来提升OTA的可扩展性。动态分区使能后&#xff1a;andorid系统可以在开机阶段动态地进行分区创建、分区销毁、分区大小调整等操作&#xff0c;下游厂商只需要规划好super分区的总大小&#xff0c;其内部的各个…...

基于C#实现Windows后台窗口操作与图像处理技术分析

在Windows编程中&#xff0c;操作后台窗口是一项复杂而有用的技术。它可以用来自动化用户界面测试、应用程序机器人等场景。本文将深入探讨如何在C#中绑定后台窗口、获取后台窗口界面图片&#xff0c;以及在图片中寻找指定图标并获取坐标。本技术文章结合最先进的资料与实践经验…...

戴尔电脑 Bios 如何进入?Dell Bios 进入 Bios 快捷键是什么?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机启动时运行的第一个程序&#xff0c;它负责初始化硬件并加载操作系统。对于戴尔电脑用户来说&#xff0c;有时可能需要进入 BIOS 进行一些特定的设置调整&#xff0c;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…...

数据结构之二叉树——堆 详解(含代码实现)

1.堆 如果有一个关键码的集合 K { &#xff0c; &#xff0c; &#xff0c; … &#xff0c;}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;则称为小堆( 或大堆 ) 。将根节点最大的堆叫做最大堆或大根堆&#xff0c;根节点最小的…...

推荐一款面向增材制造的高效设计平台:nTopology

nTopology是一款面向增材制造的高效设计平台&#xff0c;平台预置了大量增材制造常用的设计工具包&#xff0c;工程师通过调用若干个预置工具包、或自主开发定制的工具包&#xff0c;建立一个工作流&#xff0c;实现复杂几何结构的参数化设计。nTopology集合了的强大几何建模和…...

SQL,力扣题目1767,寻找没有被执行的任务对【递归】

一、力扣链接 LeetCode_1767 二、题目描述 表&#xff1a;Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…...

JavaScript数据类型- Symbol 详解

文章目录 前言1.唯一性2. 描述3. 作为对象属性键4. 全局注册6. 不可变性7. 隐式转换 前言 Symbol是ES6新增内容&#xff0c;代表创建后独一无二且不可变的数据类型&#xff0c;它主要是为了解决可能出现的全局变量冲突的问题 在JavaScript发展的过程中&#xff0c;其中的ES6带…...

WordPress网站添加嵌入B站视频,自适应屏幕大小,取消自动播放

结合bv号 改成以下嵌入式代码&#xff08;自适应屏幕大小,取消自动播放&#xff09; <iframe style"width: 100%; aspect-ratio: 16/9;" src"//player.bilibili.com/player.html?isOutsidetrue&bvidBV13CSVYREpr&p1&autoplay0" scrolling…...

11.6 校内模拟赛总结

打的很顺的一场 复盘 7:40 开题&#xff0c;看到题目名很interesting T1 看起来很典&#xff0c;中位数显然考虑二分&#xff0c;然后就是最大子段和&#xff1b;T2 构造&#xff1f;一看数据范围这么小&#xff0c;感觉不是很难做&#xff1b;T3 神秘数据结构&#xff1b;T…...

Redis常用的五大数据类型(列表List,集合set)

简介 List 的特点&#xff1a;单键多值。底层实际是个双向链表&#xff0c;对两端的操作性能很高&#xff0c;通过索引下标的操作中间的节点性能会较差。 Redis 列表是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部&#xff08;左边&#xff…...

Ubuntu 20.04 部署向量数据库 Milvus + Attu

前言 最开始在自己的办公电脑&#xff08;无显卡的 windows 10 系统&#xff09; 上使用 Docker Desktop 部署了 Milvus 容器&#xff0c;方便的很&#xff0c; 下载 Attu 也很方便&#xff0c;直接就把这个向量数据库通过 Attu 这个图形化界面跑了起来&#xff0c;使用起来感…...

实现数传数据转网口(以太网)和遥控器SBUS信号转串口的功能

为了帮助你实现数传数据转网口&#xff08;以太网&#xff09;和SBUS信号转串口的功能&#xff0c;这里提供一个基本的框架。我们将使用STM32微控制器来完成这些任务。假设你已经具备了STM32的基本开发经验&#xff0c;并且已经安装了相应的开发环境&#xff08;如STM32CubeIDE…...

APP 后台广告位配置的关键要素与策略

在当今数字化营销的浪潮中&#xff0c;APP 作为重要的信息传播渠道&#xff0c;其后台广告位的配置显得尤为关键。这不仅影响着广告的展示效果&#xff0c;还直接关系到用户体验和平台收益。 首先&#xff0c;了解目标受众是配置广告位的基础。通过对 APP 用户的行为数据进行分…...

分布式数据库概述

分布式数据库概述 分布式数据库是一种将数据分散存储在多个物理节点上的数据库系统,这些节点通过网络相互连接,形成一个逻辑上统一的数据库系统。它旨在提高数据的可用性、可靠性、性能和可扩展性,是现代大数据和云计算环境下不可或缺的重要技术。 一、分布式数据库的核心…...

EcomGPT-中英文-7B电商模型实战:基于YOLOv8的商品图像识别与文案生成联动

EcomGPT-中英文-7B电商模型实战&#xff1a;基于YOLOv8的商品图像识别与文案生成联动 1. 引言 想象一下这个场景&#xff1a;你正在看一场电商直播&#xff0c;主播语速飞快地介绍着几十款商品。你刚对其中一款水杯产生兴趣&#xff0c;还没来得及问材质和容量&#xff0c;画…...

别再为YOLOv5标签格式发愁了!手把手教你从COCO128.yaml到txt标签文件的完整配置流程

YOLOv5数据标注全流程实战&#xff1a;从配置文件解析到标签文件生成 刚接触目标检测的新手开发者们&#xff0c;常常在数据准备阶段就陷入迷茫——官方文档过于简略&#xff0c;社区教程又零散不全。本文将彻底解决这个痛点&#xff0c;带你一步步完成YOLOv5数据标注全流程&am…...

国之重器 openKylin 入驻 AtomGit:打造全球领先的智能操作系统开源根社区

操作系统是数字基础设施的核心基石&#xff0c;传统 Linux 操作系统用户和开发者经常面临系统软件更新不稳定、存量软件不兼容、开发适配成本高、显示渲染效率低等问题。在 AI 浪潮席卷全球的当下&#xff0c;将 AI 能力与操作系统已成紧密结合&#xff0c;打造智能交互新范式已…...

[vxe-table] 动态列渲染中v-if与key的协同优化方案

1. 动态列渲染的常见问题与根源分析 在使用vxe-table进行动态列渲染时&#xff0c;很多开发者都遇到过这样的场景&#xff1a;当表格列通过v-if条件动态显示或隐藏时&#xff0c;列的位置和样式会出现莫名其妙的错乱。比如原本应该在第三列显示的数据突然跳到了第五列&#xff…...

Bilibili-Evolved:视频播放卡顿解决方案:实现60fps流畅体验的智能优化方法

Bilibili-Evolved&#xff1a;视频播放卡顿解决方案&#xff1a;实现60fps流畅体验的智能优化方法 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 你是否曾在观看高清动画时遇到画面卡顿&…...

断更 9 天放大招!OpenClaw 3.22 版全维度升级,龙虾这次真的变超强

各位技术圈的小伙伴&#xff0c;学长来给大家同步个重磅消息&#xff01;火遍全网的 OpenClaw 断更 9 天之后&#xff0c;直接甩出王炸 ——2026.3.22-beta.1 预览版正式上线&#xff0c;这次可不是小修小补&#xff0c;而是从插件架构到安全防护、从模型配置到交互体验的底层大…...

开源堡垒机Guacamole二次开发实战:SFTP与录屏功能深度优化

1. Guacamole堡垒机二次开发背景与挑战 Guacamole作为一款优秀的开源堡垒机&#xff0c;在企业远程办公和运维管理中扮演着重要角色。但在实际生产环境中&#xff0c;我们常常会遇到一些原生功能无法满足需求的情况。比如在分布式部署场景下&#xff0c;guacd服务与Java后端分离…...

解决Word中MathType功能失效的VBA与注册表修复指南

1. 遇到MathType罢工&#xff1f;先别急着重装Office 最近帮同事处理Word文档时&#xff0c;发现他的MathType菜单全灰了&#xff0c;公式编辑功能完全瘫痪。这种情况在科研论文写作高峰期特别要命——你正赶着投稿 deadline&#xff0c;突然发现公式编辑器失灵了&#xff0c;…...

如何一站式解决漫画格式转换难题:CBconvert完整指南

如何一站式解决漫画格式转换难题&#xff1a;CBconvert完整指南 【免费下载链接】cbconvert CBconvert is a Comic Book converter 项目地址: https://gitcode.com/gh_mirrors/cb/cbconvert 还在为不同设备上的漫画格式兼容性问题而烦恼吗&#xff1f;CBconvert作为一款…...

kin-openapi版本迁移指南:从v0.x到v1.0的平滑升级

kin-openapi版本迁移指南&#xff1a;从v0.x到v1.0的平滑升级 【免费下载链接】kin-openapi OpenAPI 3.0 (and Swagger v2) implementation for Go (parsing, converting, validation, and more) 项目地址: https://gitcode.com/gh_mirrors/ki/kin-openapi kin-openapi是…...