zoukankan      html  css  js  c++  java
  • 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格式的数据了。

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

  • 相关阅读:
    很简单的企业管理器我写程序的方式,几个自定义控件。
    当OO遇到了持久化?!
    [自定义服务器控件] 第一步:文本框。
    [面向过程——老酒换新瓶] (一)开篇:是面向过程还是面向对象?
    个人理财小助手 —— 设计思路、功能说明
    《Head First 设计模式》 终于出中文版了。
    其实添加数据也可以这样简单——表单的第一步抽象(针对数据访问层)《怪怪设计论: 抽象无处不在 》有感
    基类、接口的应用——表单控件:一次添加、修改一条记录,一次修改多条记录。(上)
    其实添加数据也可以这样简单——表单的第三步抽象(针对UI及后置代码)
    转帖:客户端表单通用验证checkForm(oForm) js版
  • 原文地址:https://www.cnblogs.com/DMDD/p/5045845.html
Copyright © 2011-2022 走看看