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

滑县网站建设策划百度一下你就知道官网网页版

滑县网站建设策划,百度一下你就知道官网网页版,做网站开发怎么接单,公司网站建设的意义前言 学习了Mananger的初始化和以GET请求为例的过程,发现整个过程离不开AFHTTPSessionManager和AFURLSessionManger的某些方法。这两个是AFN的重要的网络通信模块内容,对它们作揖详细的学习。 AFURLSessionManager和AFHTTPSessionManager都是AFNetwork…

前言

学习了Mananger的初始化和以GET请求为例的过程,发现整个过程离不开AFHTTPSessionManager和AFURLSessionManger的某些方法。这两个是AFN的重要的网络通信模块内容,对它们作揖详细的学习。

AFURLSessionManagerAFHTTPSessionManager都是AFNetworking库中的两个类,用于处理网络请求和会话管理

如果只涉及到HTTP请求,一般会直接使用AFHTTPSessionManager进行操作。而AFURLSessionManager则提供了更底层的接口,适用于特定的定制需求或与NSURLSession相关的操作

1.1 AFURLSessionManger和AFHTTPSessionManager的关系

图解
在这里插入图片描述
首先AFURLSessionMangerAFHTTPSessionManager的父类,其中AFURLSessionManger内部还包含AFURLSessionManagerTaskDelegate_AFURLSessionTaskSwizzling

AFHTTPSessionManager本身是对网络请求做了一些简单的封装,请求的整个逻辑是分发给AFURLSessionManager或者其他类去做的;其内部管理自己的两种序列化工具,用来对请求和响应的数据做序列化;同时依赖于父类提供的保证安全,监控网络状态,实现发出HTTP请求的核心功能;

AFHTTPSessionManager也可以是AFURLSessionManager的基础上进一步封装,专门用于处理基于HTTP协议的网络请求,提供了更方便的HTTP请求方法和相关功能,如GET、POST等常见的HTTP方法,以及请求参数的设置、请求头的配置、数据解析等功能

1.2 AFURLSessionManager

1.2.1 AFURLSessionManger功能

AFURLSessionManager负责生成对应的NSURLSession的实例,管理AFNetworkReachabilityManagerAFSecurityPolicy,以此一来查看网络的连接情况,二来保证请求的安全,同时初始化生成一个AFJSONResponseSerializer的实例来序列化HTTP的响应结果;

遵守的协议

  • 点击发现他遵守了很多的协议
    请添加图片描述
    除此之外还提供了属性和方法用来完成其功能

关键属性

@property (nonatomic, strong) id <AFURLResponseSerialization> responseSerializer;
// 响应序列化// SSL的安全策略
@property (nonatomic, strong) AFSecurityPolicy *securityPolicy;/// 网络监控
@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager;

概览

在这里插入图片描述

核心方法就是生成一个AFURLSessionManager的实例对象,上文在以GET请求为例的时候介绍了dataTaskWithRequest,其实还有uploadTaskWithRequest和 downloadTaskWithRequest和downloadTaskWithResumeData

uploadTaskWithRequest

点击发现uploadTaskWithRequest存在三个不同的请求方法

  • uploadTaskWithRequest:(NSURLRequest *)requestfromFile
  • (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)requestfromData
  • (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest
/// 使用本地的文件请求创建一个NSURLSessionUploadTask
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)requestfromFile:(NSURL *)fileURLprogress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlockcompletionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
{/// 它调用了request和本地的文件URL路径创建了一个uploadTaskNSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL];/// 为该uploadTask太溺爱对应的代理 addDelegateForUploadTaskif (uploadTask) {[self addDelegateForUploadTask:uploadTaskprogress:uploadProgressBlockcompletionHandler:completionHandler];}return uploadTask;
}/// 根据指定的HTTP Body请求创建URLSessionUploadTask
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)requestfromData:(NSData *)bodyDataprogress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlockcompletionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
{NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData];[self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler];return uploadTask;
}
/// AFURLSessionManager的一个方法,用于创建一个基于流的上传任务。具体参数说明如下:
/// request:上传请求,即要上传的数据和上传地址。
/// uploadProgressBlock:上传进度回调,NSProgress对象用于获取上传进度信息。
/// completionHandler:上传完成后的回调,包含上传的响应、响应数据和错误信息。
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)requestprogress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlockcompletionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
{/// 使用这个方法创建的上传任务,数据是通过流的方式上传的,而不是直接读取文件或数据进行上传,因此适用于上传大文件或者流数据NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithStreamedRequest:request];[self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler];return uploadTask;
}

uploadTaskWithRequest根据不同的数据创建一个NSURLSessionUploadTask任务,最终都会走到AFURLSessionManageraddDelegateForUploadTask为对应的uploadTask设置代理;
请添加图片描述
解析:

/// uploadTask:要添加代理的上传任务。
/// uploadProgressBlock:上传进度回调,通过该回调可以获取上传的进度信息。
/// completionHandler:上传完成回调,包含上传的响应、响应数据和错误信息。
- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTaskprogress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlockcompletionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
{/// 创建了一个AFURLSessionManagerTaskDelegate对象作为上传任务的代理,将该代理与上传任务关联AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] initWithTask:uploadTask];delegate.manager = self;delegate.completionHandler = completionHandler;/// 将上传任务的描述设置为AFURLSessionManager的taskDescriptionForSessionTasks属性。uploadTask.taskDescription = self.taskDescriptionForSessionTasks;/// 最后,将代理对象设置为上传任务的代理,并设置上传进度回调和上传完成回调[self setDelegate:delegate forTask:uploadTask];delegate.uploadProgressBlock = uploadProgressBlock;
}

downloadTaskWithRequest

/// 根据指定的请求创建downloadTask
// 参数:
/// request:下载请求,即要下载的资源地址。
/// downloadProgressBlock:下载进度回调,用于获取下载进度信息。
/// destination:下载目标回调,用于指定下载文件的存储位置。
/// completionHandler:下载完成回调,包含下载的响应、文件路径和错误信息。
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)requestprogress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlockdestination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destinationcompletionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
{/// 使用self.session创建一个NSURLSessionDownloadTask对象,即创建了一个下载任务。NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithRequest:request];/// 调用addDelegateForDownloadTask:progress:destination:completionHandler:方法为下载任务添加代理[self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler];return downloadTask;
}

downloadTaskWithResumeData

///  创建重用数据的下载任务:根据已经下载的数据ResumeData创建下载任务继续进行下载
///  官方:用于创建一个带有断点续传功能的下载任务并添加相关的代理。// 参数
///  resumeData:包含了之前下载任务的断点续传数据,用于恢复之前的下载进度。
/// downloadProgressBlock:下载进度回调,用于获取下载进度信息。
/// destination:下载目标回调,用于指定下载文件的存储位置。
/// completionHandler:下载完成回调,包含下载的响应、文件路径和错误信息。
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeDataprogress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlockdestination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destinationcompletionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
{/// 首先使用self.session和提供的断点续传数据resumeData创建一个NSURLSessionDownloadTask对象,即创建了一个带有断点续传功能的下载任务。NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithResumeData:resumeData];/// 调用addDelegateForDownloadTask:progress:destination:completionHandler:方法为下载任务添加代理,并传入下载进度回调、目标回调和完成回调。[self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler];return downloadTask;
}

download最终也会调用addDelegateForDownloadTask

解析:

/// 该方法 用于为下载任务添加代理和相关的回
/// downloadTask:要添加代理的下载任务。
/// downloadProgressBlock:下载进度回调,用于获取下载进度信息。
/// destination:下载目标回调,用于指定下载文件的存储位置。
/// completionHandler:下载完成回调,包含下载的响应、文件路径和错误信息。、
- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTaskprogress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlockdestination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destinationcompletionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
{AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] initWithTask:downloadTask];delegate.manager = self;delegate.completionHandler = completionHandler;/// 如果提供了destination回调,则设置代理的downloadTaskDidFinishDownloading属性为一个代码块,该代码块接收NSURLSession、NSURLSessionDownloadTask和下载文件的临时位置作为参数,并通过调用destination回调来返回最终的下载文件位置if (destination) {delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) {return destination(location, task.response);};}/// 设置下载任务的taskDescription属性为self.taskDescriptionForSessionTasks,这是用于描述任务的字符串。downloadTask.taskDescription = self.taskDescriptionForSessionTasks;[self setDelegate:delegate forTask:downloadTask];delegate.downloadProgressBlock = downloadProgressBlock;
}

1.2.2 AFURLSessionMananger遵守的代理

在AFURLSessionMananger的实现文件里面可以发现NSURLSessionTaskDelegateNSURLSessionDataDelegate以及NSURLSessionDownloadDelegate

需要提前说明的是AFURLSessionManager对这些代理做了一些公共的处理,最终转发到自定义的代理AFURLSessionManagerTaskDelegate的3个代理方法中,用来负责把每个task对应的数据回调回去;

围绕他们三个展开学习
NSURLSessionDownloadDelegate

NSURLSessionDownloadDelegate的方法在AFURLSessionMananger实现了3个。

  • URLSession:downloadTask:didFinishDownloadingToURL:
    在下载任务完成后调用,提供下载文件的临时位置URL。可以在此方法中处理下载后的文件移动、保存等操作。
  • URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:
    在下载任务进行中定期调用,提供下载进度的相关信息,包括已写入数据大小和总数据大小。可以在此方法中更新下载进度条等UI元素。
  • URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:
    在恢复下载任务时调用,提供已恢复的下载位置和预期的总字节数。
#pragma mark - NSURLSessionDownloadDelegate
/// 在下载任务完成后调用,提供下载文件的临时位置URL。可以在此方法中处理下载后的文件移动、保存等操作。
- (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{
// 转发代理AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask];if (self.downloadTaskDidFinishDownloading) {NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location);if (fileURL) {delegate.downloadFileURL = fileURL;NSError *error = nil;if (![[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]) {[[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo];} else {[[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidMoveFileSuccessfullyNotification object:downloadTask userInfo:nil];}return;}}if (delegate) {[delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location];}
}
/// 在下载任务进行中定期调用,提供下载进度的相关信息,包括已写入数据大小和总数据大小。可以在此方法中更新下载进度条等UI元素。
- (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTaskdidWriteData:(int64_t)bytesWrittentotalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{// 转发代理AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask];if (delegate) {[delegate URLSession:session downloadTask:downloadTask didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite];}if (self.downloadTaskDidWriteData) {self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);}
}
/// 在恢复下载任务时调用,提供已恢复的下载位置和预期的总字节数
- (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTaskdidResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes
{// // 转发代理AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask];if (delegate) {[delegate URLSession:session downloadTask:downloadTask didResumeAtOffset:fileOffset expectedTotalBytes:expectedTotalBytes];}if (self.downloadTaskDidResume) {self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes);}
}

这三个代理方法最终都会进行代理转发,到AFURLSessionManagerTaskDelegate中,AF中的deleagate是需要对应每个task去私有化处理的对应看看AFURLSessionManagerTaskDelegate中的这三个代理方法都做了什么 吧:

ps:别跳转错了
请添加图片描述

#pragma mark - NSURLSessionDownloadDelegate- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTaskdidWriteData:(int64_t)bytesWrittentotalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{// 更新当前下载进度self.downloadProgress.totalUnitCount = totalBytesExpectedToWrite;self.downloadProgress.completedUnitCount = totalBytesWritten;
}- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTaskdidResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes{// 更新当前下载进度self.downloadProgress.totalUnitCount = expectedTotalBytes;self.downloadProgress.completedUnitCount = fileOffset;
}
/// ‼️下载完成调用
- (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{self.downloadFileURL = nil;if (self.downloadTaskDidFinishDownloading) {self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location);if (self.downloadFileURL) {NSError *fileManagerError = nil;if (![[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]) {[[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo];} else {[[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidMoveFileSuccessfullyNotification object:downloadTask userInfo:nil];}}}
}
  • 在 ‼️ 下载完成时的调用代理方法中,AFURLSessionManagerAFURLSessionManagerTaskDelegate中都进行了文件路径的移动,而NSURlSession代理的下载路径是所有request公用的下载路径,设置之后所有的request都会下载到之前的那个路径。而AFURLSessionManagerTaskDelegate中对应到每一个task中,每一个task可以设置自己的下载路径;
  • 总结:这些代理方法在AFURLSessionManager中实现的时候都是对session做一个公共的处理,每一个不同的task进行特定的处理时,需要将代理转发到AFURLSessionManagerTaskDelegate中,在AFURLSessionManagerTaskDelegate的代理中实现;

1.3 AFURLSessionManagerTaskDelegate的作用

AFURLSessionManagerTaskDelegate 是 AFNetworking 框架中的一个类,用于处理 URLSessionTask 相关的代理回调。它作为 AFURLSessionManager 的任务代理,负责处理网络请求任务的进度、完成回调等操作。

具体来说,AFURLSessionManagerTaskDelegate 的主要作用包括:

  • 处理任务进度:通过设置 uploadProgressBlock 和 downloadProgressBlock 属性,可以监控上传任务和下载任务的进度,并在进度发生变化时执行相应的代码块。
  • 处理任务完成回调:在任务完成时,会执行 completionHandler 属性所指定的代码块,将任务的响应、响应数据和错误信息传递给回调函数,以便进一步处理任务的结果。
  • 处理下载任务的文件保存路径:对于下载任务,可以通过设置 downloadTaskDidFinishDownloading 属性,来指定任务完成后将文件保存的路径。
  • 管理任务与代理的关系:在创建任务时,会将任务与对应的 AFURLSessionManagerTaskDelegate 对象关联起来,以确保任务的代理回调能够正确处理。
  • 总的来说,AFURLSessionManagerTaskDelegate 扮演了一个中间角色,连接了 URLSessionTask 和 AFURLSessionManager 之间的交互,处理任务的进度、完成回调和其他相关操作,提供了更便捷的方式来管理和处理网络请求任务。

2. AFHTTPSessionManager

AFHTTPSessionManager本身是对网络请求做了一些简单的封装,请求的整个逻辑是分发给AFURLSessionManager或者其他类去做的;其内部管理自己的两种序列化工具,用来对请求和响应的数据做序列化;同时依赖于父类提供的保证安全,监控网络状态,实现发出HTTP请求的核心功能;

2.1 属性和接口

在这里插入图片描述
其实上一章已经很详细的说明了很多AFHTTPSessionManager的内容

AFHTTPSessionManager的一些方法的实现,初始化方法最终都会调用到AFURLSessionManager中的初始化方法完成sessionManager的初始化;

GET为例:

- (NSURLSessionDataTask *)GET:(NSString *)URLStringparameters:(nullable id)parametersheaders:(nullable NSDictionary <NSString *, NSString *> *)headersprogress:(nullable void (^)(NSProgress * _Nonnull))downloadProgresssuccess:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))successfailure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
{/// 调用 dataTaskWithHTTPMethod:URLString:parameters:headers:uploadProgress:downloadProgress:success:failure: 方法,该方法创建一个 NSURLSessionDataTask 数据任务对象,用于执行指定的 HTTP GET 请求。将传入的参数传递给该方法以构建请求。NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET"URLString:URLStringparameters:parametersheaders:headersuploadProgress:nildownloadProgress:downloadProgresssuccess:successfailure:failure];/// 调用 [dataTask resume] 方法启动数据任务,使其开始执行。[dataTask resume];/// 返回数据任务对象 dataTask。return dataTask;
参数:
URLString:请求的URL值
parameters:根据需求的请求参数
headers:请求头
downloadProgress:更新下载进度的对象
success:任务成功后执行的Block对象
failure:任务失败后执行的Block对象
}

一是生成一个dataTask任务,二是调用resume开启请求;

该类的核心方法dataTaskWithHTTPMethod:URLString:parameters:headers:uploadProgress:downloadProgress:success:failure: 该方法是生成datatask,是AFHTTPSessionManager中的da taTaskWithHTTPMethod方法

在上一章也讲过! 很重要!

该方法做了两件事情:一是对请求参数进行序列化;二是调用dataTaskWithRequest方法生成后一个datatask任务;最终返回一个datatask;

- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)methodURLString:(NSString *)URLStringparameters:(nullable id)parametersheaders:(nullable NSDictionary <NSString *, NSString *> *)headersuploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressdownloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgresssuccess:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successfailure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure
{NSError *serializationError = nil;/// 使用 `self.requestSerializer` 对象根据传入的参数构建一个 `NSMutableURLRequest` 可变请求对象。/// self.requestSerializer:请求序列化器/// ‼️‼️ 需要点进去的方法1NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError];for (NSString *headerField in headers.keyEnumerator) {[request setValue:headers[headerField] forHTTPHeaderField:headerField];}///  // 如果在构建请求过程中出现了 `serializationError` 错误,即请求参数序列化错误,则会执行相应的错误处理逻辑。if (serializationError) {if (failure) {/// 如果存在 `failure` 失败回调,则将错误通过异步方式回调到主队列上。dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{failure(nil, serializationError);});}return nil;}
/// 创建一个 `NSURLSessionDataTask` 数据任务对象__block NSURLSessionDataTask *dataTask = nil;/// 并调用 `dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:` 方法来配置任务的上传进度回调、下载进度回调和完成处理程序块。// ‼️ 需要点进去的方法2dataTask = [self dataTaskWithRequest:requestuploadProgress:uploadProgressdownloadProgress:downloadProgresscompletionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {if (error) {if (failure) {failure(dataTask, error);}} else {if (success) {success(dataTask, responseObject);}}}];return dataTask;

总结

到此,网络通讯模块所做的事情就到此,在该模块中主要的任务就是发起网络请求。分成AFURLSessionManger和 AFHTTPSessionManager两部分来做处理。 AFURLSessionManger是AFHTTPSessionManager的父类,其中AFURLSessionManger内部还包含AFURLSessionManagerTaskDelegate和_AFURLSessionTaskSwizzling;AFHTTPSessionManager本身是对网络请求做了一些简单的封装,请求的整个逻辑是分发给AFURLSessionManager或者其他类去做的;其内部管理自己的两种序列化工具,用来对请求和响应的数据做序列化;同时依赖于父类提供的保证安全,监控网络状态,实现发出HTTP请求的核心功能;

参考:AFN源码解析

http://www.hrbkazy.com/news/5140.html

相关文章:

  • 商城网站都有什么功能模块综合权重查询
  • 野花影视大全在线西瓜seo外包公司如何优化
  • 湖南长沙公司seo技术最新黑帽
  • 郑州网站建设 天强科技图片识别
  • 怎么做网站发货千锋教育培训多少钱
  • 北医三院生殖科做试管的网站电商网站制作
  • apache添加网站北京疫情最新情况
  • 光谷 网站建设公司seo博客网址
  • wordpress完美搬家快速提高网站关键词排名优化
  • 西安 网站建设 培训班云南网站seo服务
  • 网站建设客服术语网店推广平台有哪些
  • 如何用公众号做网站一站式自媒体服务平台
  • 做logo用什么网站重庆seo研究中心
  • 常德外贸网站优化推广网站seo优化
  • 广州定制网站开发网络营销推广方式包括
  • 动态网页是什么seo免费软件
  • b2c网站结构分析优化网站的方法有哪些
  • 唐山高端网站建设seo快速排名软件网址
  • 长沙做网站企业株洲seo
  • 深圳宝安区做网站培训学校加盟
  • 帝国网站管理系统安装关键词优化的最佳方法
  • 甘肃住房城乡建设厅网站首页山东seo费用多少
  • 个人网站是怎么样的线上营销渠道有哪些
  • 百度上搜不到做的网站惠州百度seo在哪
  • 农家院做宣传应该在哪个网站常熟seo关键词优化公司
  • python如何安装wordpresswindows优化大师自动下载
  • 网站刷链接怎么做小程序模板
  • 做什么网站比较受欢迎杭州明开seo
  • 做钓鱼网站违法吗郑州网站建设专业乐云seo
  • logo设计软件手机版系统优化软件推荐