iOS开发之网络编程--1、AFNetwork 3.x 的所有开发中常用基础介绍

简介:

前言:第三方网络请求框架中AFNetwork 3.x收欢迎程度相当高的:

由于iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构。而且现在AFN 3.x版本 完全摒弃了NSURLConnection,而使用了NSURLSession。

关于NSURLConnection和NSURLSession的用法,读者可以阅读本人写的很多前几篇博文。

下载方式:1、直接到github官网上搜索"AFN",看到如图上图这样的受欢迎程度高的自然就是。2、使用cocoapods集成到你的项目中去,关于cocoapods的安装和使用方法,请读者阅读本人的两篇博文:《CocoaPods的安装(图文并茂)OS X 10.11 系统》和《CocoaPods的使用(图文并茂)OS X 10.11 系统

 内容大纲:

  • 1、AFN 3.X的基本使用
  • 2、AFN 3.X的文件下载
  • 3、AFN 3.X的文件上传
  • 4、AFN 3.X的使用技巧
  • 5、AFN 3.X 序列化相关
  • 6、AFN 3.X 网络监听(不难)

正文:

1、AFN 3.X的基本使用

  1-1、步骤:

    1-1-1、创建会话管理者
          是AFHTTPSessionManager作为会话管理者,用manager创建
          不是AFURLSessionManager,而且AFURLSessionManager无manager方法
        1-1-2、开始请求,URL都不需要自己创建了。
          第一个参数:请求路径(NSString
            以前: http://120.25.226.186:32812/video?type=JSON
                  http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON
                  协议头+主机地址+接口名称+?+参数&参数
            现在:http://120.25.226.186:32812/video
                  http://120.25.226.186:32812/login
            协议头+主机地址+接口名称
          第二个参数:要传递的参数(字典)
          第三个参数: progress:进度 nil
          第四个参数:  success:成功,请求成功的回调
                          task:请求任务
                responseObject:响应体信息,而且内部已经进行了序列化处理
          第五个参数:failure 请求失败的回调
                      task:请求任务
                     error:如果失败,那么error有值

  1-2、源码展示

    

2、AFN 3.X的文件下载

  2-1、步骤:

         第一个参数:请求对象
         第二个参数:progress 进度信息的回调
                downloadProgress
                completedUnitCount:已经下载的数据大小
                  totalUnitCount":数据的总大小
         第三个参数:destination 有返回值
            传递一个目标路径(NSURL),AFN内部会自动执行剪切处理
              targetPath:临时路径
              response: 响应头信息
         第四个参数:completionHandler 下载完成之后调用

  2-2、源码展示

      

3、AFN 3.X的文件上传

  

  

4、AFN 3.X的使用技巧

      在实际开发中,是不会在控制器中直接调用框架的网络请求,比如:如果在网络请求的某个控制器中直接调用了这个AFN框架,会出现后期不好维护的情况,比如一般企业开发的app项目会有十来个二十来  个ViewController,大部分控制器都会需要活数据,也就是需要通过请求网络来获取数据,那么在多个控制器都导入和使用了AFN框架,而实际开发需求可能会让你换掉网络请求框架,要将这个AFN框架换成  ASI框架,这样可想而知,作为码农都要哭了。


那么可行性方案,也是企业开发中常常会用到的方法:
      在需要网络请求的控制器和网络请求框架之间建立一个工具类,这个工具类可以是类别,也可以是普通类,然后将网络请求的方法简易封装起来,最好能应对不同情况和不同的数据的请求,并且能实现,当  我将AFN框架替换成ASI框架的时候,控制器里调用的这个工具类的方法完全不需要改变,要改变的只是工具类中将AFN替换成ASI框架。总之,创建一个网络请求工具类,能够让所有的控制器不依赖底层框   架,只依赖这个工具类。

  

5、AFN 3.X 序列化相关

  5-1、JSON解析,内部会自动对JSON数据进行反序列化处理,通过响应头信息返回字典对象(可以打印出其类型和字典元素值查看)

       不需要手动设置解析方式。

  

  5-2、XML解析需要<NSXMLParserDelegate>协议辅助解析XML,当然也可以使用我的封装好的能实现XML直接转模型字典的工具类"HYXMLParser"。

      需要告诉AFN以XML的方式解析数据。

      GET方法中要用有NSXMLParser参数的解析方法。

  

  5-3、直接返回服务器的HTML数据格式,记得将返回的数据要设置Encoding为NSUTF8StringEncoding,然后直接输出。

      需要手动设置告诉AFN解析方式为不解析,即AFHTTPResponseSerializer serializer。

  

  5-4、对于返回的是NSData格式的数据,比如网络上的返回的图片、视频等资源二进制数据。 

      需要手动设置告诉AFN解析方式为不解析,即AFHTTPResponseSerializer serializer。

  

 6、AFN 3.X 网络监听(不难)

  

 

相关文章
|
29天前
|
机器学习/深度学习 自然语言处理 数据处理
大模型开发:描述长短期记忆网络(LSTM)和它们在序列数据上的应用。
LSTM,一种RNN变体,设计用于解决RNN处理长期依赖的难题。其核心在于门控机制(输入、遗忘、输出门)和长期记忆单元(细胞状态),能有效捕捉序列数据的长期依赖,广泛应用于语言模型、机器翻译等领域。然而,LSTM也存在计算复杂度高、解释性差和数据依赖性强等问题,需要通过优化和增强策略来改进。
|
29天前
|
机器学习/深度学习
大模型开发:解释卷积神经网络(CNN)是如何在图像识别任务中工作的。
**CNN图像识别摘要:** CNN通过卷积层提取图像局部特征,池化层减小尺寸并保持关键信息,全连接层整合特征,最后用Softmax等分类器进行识别。自动学习与空间处理能力使其在图像识别中表现出色。
24 2
|
30天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
84 3
|
1月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
37 8
C++ Qt开发:QTcpSocket网络通信组件
|
5天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
9 0
|
20天前
|
SQL 前端开发 Java
五邑大学餐厅网络点餐系统设计与实现(包含完整源码详细开发过程)
五邑大学餐厅网络点餐系统设计与实现(包含完整源码详细开发过程)
|
20天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
1月前
|
存储 网络安全 C++
C++ Qt开发:QUdpSocket网络通信组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QUdpSocket`组件实现基于UDP的网络通信功能。与`QTcpSocket`组件功能类似,`QUdpSocket`组件是 Qt 中用于实现用户数据报协议(UDP,User Datagram Protocol)通信的类。UDP 是一种无连接的、不可靠的数据传输协议,它不保证数据包的顺序和可靠性,但具有低延迟和简单的特点。
20 0
C++ Qt开发:QUdpSocket网络通信组件
|
1月前
|
缓存 网络安全 调度
C++ Qt开发:QNetworkAccessManager网络接口组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QNetworkAccessManager`组件实现Web网页访问。QNetworkAccessManager是Qt网络模块中的关键类,用于管理网络访问和请求。作为一个网络请求的调度中心,它为Qt应用程序提供了发送和接收各种类型的网络请求的能力,包括常见的GET、POST、PUT、DELETE等。这个模块的核心功能在于通过处理`QNetworkReply`和`QNetworkRequest`来实现
21 0
C++ Qt开发:QNetworkAccessManager网络接口组件
|
1月前
|
监控 C++ 索引
C++ Qt开发:QNetworkInterface网络接口组件
在Qt网络编程中,`QNetworkInterface`是一个强大的类,提供了获取本地网络接口信息的能力。通过`QNetworkInterface`,可以轻松地获取有关网络接口的信息,包括接口的名称、硬件地址、IP地址和子网掩码等。这个类对于需要获取本地网络环境信息的应用程序特别有用,例如网络配置工具、网络监控程序等。`QNetworkInterface`通过提供一致而易于使用的接口,使得网络编程中的任务更加简便和可靠。
26 4
C++ Qt开发:QNetworkInterface网络接口组件