AFNetworking 学习笔记

从3.0开始

一转眼,AF已经更新到了3.0版本。目前cocoapods上的最新版本是3.0 beta1。在3.0的版本里面,AF全面地使用NSURLSession代替了NSURLConnection。之前花了一些时间学习NSURLSession,在这里的学习终于派上了用场。在这里主要学习3.0版本的使用。希望在项目中能够顺利地过度到AFNetwoking 3.0版本。此外,随着Objective-c慢慢被Swift替代,AFNetworking 3.0可能是最后一个大版本更新。本文会一直随着AN的更新继续更新,也是一个不断学习的过程。

结构

在3.0时代,AFN精简了结构,全面使用了NSURLSession

 beta1里面只剩下了当前几个Manager。

AFHTTPSessionManagerAFURLSessionManager的子类。

AFURLSessionManager

AFURLSessionManager实现了以下几种NSURLSession的代理方法

NSURLSessionDelegate

  • URLSession:didBecomeInvalidWithError:
  • URLSession:didReceiveChallenge:completionHandler:
  • URLSessionDidFinishEventsForBackgroundURLSession:

NSURLSessionTaskDelegate

  • URLSession:willPerformHTTPRedirection:newRequest:completionHandler:
  • URLSession:task:didReceiveChallenge:completionHandler:
  • URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
  • URLSession:task:didCompleteWithError:

NSURLSessionDataDelegate

  • URLSession:dataTask:didReceiveResponse:completionHandler:
  • URLSession:dataTask:didBecomeDownloadTask:
  • URLSession:dataTask:didReceiveData:
  • URLSession:dataTask:willCacheResponse:completionHandler:

NSURLSessionDownloadDelegate

  • URLSession:downloadTask:didFinishDownloadingToURL:
  • URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:
  • URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:

成员

属性

AFURLSessionManager中,主要的三个属性如下

session实现了会话,operationQueue是一个操作队列。responseSerializer是实现了AFURLResponseSerialization协议的一个对象。



Manager中还包括了安全协议的对象和连通性的对象。这两个类将在后面谈到。



下面是Task的内容,包含与当前Session



回调块队列,包括了在主队列和私有队列的两个部分

方法

初始化方法



创建一个NSURLSessionDataTask数据性任务



创建`NSURLSessionUploadTask 上传任务



创建NSURLSessionDownloadTask 下载任务



获得一个特定任务的progress进度



Session Delegate Callbacks 设置会话代理回调

Task Delegate Callbacks 设置任务代理回调

当任务需要一个新的请求体发送给服务器的时候。 

当HTTP请求回调有重定向的的话设置这个Block 

当一个请求需要特别的鉴权的时候设置这个challenge 

设置一个block去追踪上传进度

设置一个block当任务完成后执行 

Setting Data Task Delegate Callbacks 设置数据任务代理的回调

设置一个在数据任务获得response的时候回调block

设置一个block当数据任务变成下载的任务的时候执行

设置一个block当数据任务获得到数据的时候 

设置一个block绝对是否缓存数据任务

Download Task Delegate Callbacks 下载任务代理回调

设置block当下载任务完成下载后

设置block去追踪下载任务进度情况

设置block当下载任务执行/恢复的时候 执行

头文件的内容基本就是以上的了。可以看到整个AF的体系非常清晰完整,没有多余的东西,头文件只暴露了应该暴露的东西,值得我们去学习。

使用的例子

使用AFURLSessionManager

从源码中可以看到,AFURLSessionManager实现了

1
NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NSSecureCoding, NSCopying

首先需要设置url和NSURLConfirguration

这里是使用百度API商店的公开API 

然后初始化Manager

设置ResponseSerializer 

初始化request 

对request进行相关设置 

根据request生成对应的NSURLSessionTask。 

执行任务 

来看看执行后的信息

这里由于使用的AFHTTPResponseSerializer(API的问题,仅仅支持text/plain)所以在获取的数据后,我们自己要json序列化。如果是设计好的API,直接使用AFJSONRequestSerializer就可以在回调中获取到json格式的数据了。

可以看到,整个使用还是很方便的。我们可以根据自己的需求配置不同设置。

时间: 2024-10-23 12:40:17

AFNetworking 学习笔记的相关文章

iOS 8:【转】AFNetworking 学习笔记二

源地址:http://fann.im/blog/2013/04/29/afnetworking-notes-2/ AFNetworking 学习笔记 的后续,记录一些 AFN 比较隐蔽的知识点. AFN 的设计过于理想化 AFN 的架构设计非常棒,使用起来也很简单,但一些设计过于理想化,在实际开发中会有一些条件不能满足,这时候 AFN 就会出现一些“坑”. 1. 缓存策略 NSURLRequest 默认的缓存策略是 NSURLRequestUseProtocolCachePolicy,网络请求是

iOS 8:【转】AFNetworking 学习笔记

源地址:http://fann.im/blog/2012/08/21/afnetworking-notes/ 这篇笔记是在 AFN v0.10.1 时候写的,AFN v1.0 以后加入了不少新东西,比如 SSL 支持,不过整体结构没有变化. 后续跟进了一篇 AFNetworking Notes 2 上图来自 @mattt 对 AFN 的介绍:Everybody Loves AFNetworking And So Can You!. 学习 AFN,简单记录一下以加深自己理解. AFN 的基础部分是

iOS学习笔记13-网络(二)NSURLSession

在2013年WWDC上苹果揭开了NSURLSession的面纱,将它作为NSURLConnection的继任者.现在使用最广泛的第三方网络框架:AFNetworking.SDWebImage等等都使用了NSURLSession.作为iOS开发人员,应该紧随苹果的步伐,不断的学习,无论是软件的更新.系统的更新.API的更新,而不能墨守成规. 相比较NSURLConnection,NSURLSession提供了 配置会话缓存.协议.cookie和证书能力,这使得网络架构和应用程序可以独立工作.互不干

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.