代理网站源码分享 代理网址是什么意思

今天给各位分享代理网站源码分享的知识,其中也会对代理网址是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

版权地址:https://www.jianshu.com/p/5f8e56a17d85

作者:有毒的程序猿

说明:八点钟学院二期学员

学院链接:https://ke.qq.com/course/171725

前言

上海快30岁了月入3W,为什么还是焦虑?

你焦虑,是因为你月入三万的姿势不对!如果你月入三万的组成是:月薪1万,另外四套房子租金两万,绝对不会焦虑.

AFNetworking-github原文链接:https://github.com/AFNetworking/AFNetworking

介绍

这篇文章主要对AFNetworking的对外接口和请求处理文件进行阅读,会拿出里面的优秀的技术点进行介绍.

一、AFHTTPSessionManager

AFHTTPSessionManager类主要是对外提供接口,通过调用父类方法封装一些常用接口.

AFHTTPSessionManager继承自AFURLSessionManager,并且实现了<NSSecureCoding,NSCopying>两个协议,如果对这两个协议想要深入了解可以进这些查看https://www.jianshu.com/p/c5475f30bb4e

A.NSCoder

-(instancetype)initWithCoder:(NSCoder*)decoder;//解档扩展通过XIB创建的一个nib文件,会调用相关类的这个方法-(void)encodeWithCoder:(NSCoder*)coder;//归档+(BOOL)supportsSecureCoding;支持NSSecureCoding

B.clangwarning

pragmaclangdiagnosticignored”-Wgnu”\n//code\nissues1477上reopen了多次,讨论还是很激烈的。讨论的起由是app会莫名crash,主要原因是AFNetworking对NSURLSessionTask中的state进行了KVO操作。一开始人们removeObserver这个state,但是会造成AFNetworkActivityIndicatorManager功能(其中会观察state)削弱。另外后来iOS8上也出现了同样crash现象,貌似iOS7和iOS8在NSURLSessionTask有些不同。最后还是有个大神用swizzling方法才解决了这个问题。

A.任务状态监听

AFNetworking巧妙的运用runtime的方法交换在+load中给NSURLSessionTask的两个方法注入监听.

-(void)suspend;\n-(void)resume;

-(void)af_resume{NSAssert([selfrespondsToSelector:@selector(state)],@”Doesnotrespondtostate”);NSURLSessionTaskStatestate=[selfstate];\n[selfaf_resume];\nif(state!=NSURLSessionTaskStateRunning){//这有点不明白这个讨论恒成立state=NSURLSessionTaskStateCanceling;\n//发送重新开始通知用于网路指示器的设置\n[[NSNotificationCenterdefaultCenter]postNotificationName:AFNSURLSessionTaskDidResumeNotificationobject:self];\n}\n}

<三>AFURLSessionManager

A.NSURLSession与NSURLConnection

NSURLSession在iOS7.0时被Apple提出后,虽然Apple一直对其良好的API设计大力推广,\n然而其能够达到的效果,似乎一直都和NSURLConnection不相伯仲.由于AFNetworking优秀的架构设计,NSURLSession甚至还不如NSURLConnection好用.\n那么,有什么理由切换到NSURLSession?2015年的WWDC似乎告诉了我们答案.HTTP/2,2015年5月RFC7540正式发表的下一代HTTP协议,\n是1999年来HTTP1.1发布后的首个更新.相对于前一个版本,HTTP/2以快著称.

根据2015的WWDCSession71,我们知道iOS9+,NSURLSession开始正式支持HTTP/2,也就意味着你的网络连接速度也可以有如上图那样的提升。

B.共享NSURLSession思路分析

现在AFNetworking内部提供的创建方式[AFHTTPSessionManagermanager],每次调用会新建一个NSURLSession,然后新建Task,激活Task,完成网络请求。

在回答这个问题以前,我们先来聊聊网络的通讯协议。\n我们也都知道,HTTP协议是基于TCP协议的。所以在每次的HTTP请求之前,客户端和服务器端,\n都先需要经过TCP连接的三次握手,即每次请求之前,\n网络的数据都已经在客户端和服务器端之间来回了三次。如下图:

事实上在HTTP0.9,HTTP1.0协议的时代,\n每次HTTP的请求,都需要先经过TCP的连接,然后才开始HTTP的请求.\n\n那么,为了让我们的请求更快,避免每次都产生一个TCP三次握手,成了一个优化的选项。\n于是在HTTP1.1中,出现了Connection:keep-alive这个选项。这个优化选项,\n可以使得客户端和服务器端复用一个TCP连接,从而减小每次的网络请求时间。

没错,共享的NSURLSession将会复用TCP的连接,而每次都新建NSURLSession的操作将导致每次的网络请求都开启一个TCP的三次握手。所以我们封装请求类的时候,最好用单例模式.让manager持有NSURLSession,达到共享的效果.即一个Session创建多个Task来实现网路的请求.

B.delegate的储存

self.mutableTaskDelegatesKeyedByTaskIdentifier是一个储存AFURLSessionManagerTaskDelegate的可变字典.用NSLock锁保证了线程安全.

C.responseSerializer

\n/**\n当数据传输任务用“GET”、“POST”等方式时,在“dataTaskWithRequest:success:failure:”方法里创建的一个从服务器发回的响应。\n默认情况下,此属性设置为“AFJSONResponseSerializer”的一个实例。\n@warning“responseSerializer”必须不为空.\n*/@property(nonatomic,strong)id<AFURLResponseSerialization>responseSerializer;

AFHTTPRequestSerializer和AFHTTPResponseSerializer都遵循了<AFURLResponseSerialization>协议.

为什么这里提到这个呢,这种通过协议来整合不同工具的方法,很值得借鉴.在以后的文章中会详细介绍这两个类.

谢谢观赏。

关于代理网站源码分享的内容到此结束,希望对大家有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平