您的位置:首页 > 移动开发 > IOS开发

iOS开发-AFNetworking

2016-03-07 18:22 375 查看

一、通过AFHTTPSessionManager请求

1、创建manager

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];


2、设置超时时间、接收类型

manager.requestSerializer.timeoutInterval = 10;

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript", @"text/plain", nil];


3、发起http请求

[manager POST:str parameters:param progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
//成功的代码
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败的代码
}];


二、AFNetworking HTTP相关的类

AFHTTPSessionManager:AFURLSessionManager类的子类,包含很多用于HTTP的设置与方法; 

  AFHTTPRequestSerializer NSURLRequest的构造器

  AFHTTPResponseSerializer NSURLResponse的构造器

三、流程

1、调用post请求

- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
progress:(void (^)(NSProgress * _Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure


2、新建一个task

- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress
success:(void (^)(NSURLSessionDataTask *, id))success
failure:(void (^)(NSURLSessionDataTask *, NSError *))failure


3、新建一个request

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
error:(NSError *__autoreleasing *)error


4、新建一个dataTask

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request
uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock
downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock
completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject,  NSError * _Nullable error))completionHandler


5、添加delegate

- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask
uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock
downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock
completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler


四、整体架构

1,AFURLSessionManager的mutableTaskDelegatesKeyedByTaskIdentifier属性,存放着每一个task对应的AFURLSessionManagerTaskDelegate;

2,AFURLSessionManager的NSURLSessionDelegate实现,会去调用每个task对应的AFURLSessionManagerTaskDelegate;

3,设置task的AFURLSessionManagerTaskDelegate时,用了NSLock,进行多线程同步;

任务的调度采用了工厂模式、观察者和代理模式的应用。

工厂模式

对于HTTP协议的请求有AFHTTPRequestSerializer、AFJSONRequestSerializer、AFPropertyListRequestSerializer类,三个都依赖抽象接口AFURLRequestSerialization

对于HTTP协议的响应有

AFHTTPResponseSerializer、AFJSONResponseSerializer、AFXMLParserResponseSerializer、AFXMLDocumentResponseSerializer、AFPropertyListResponseSerializer、AFImageResponseSerializer、AFCompoundResponseSerializer

都依赖抽象接口 AFURLResponseSerialization

符合 开放-封闭原则

对增加新的请求头、响应头是开放的,而且增加新内容不需要修改原内容

观察者模式

对于task的每个生命周期,都会有相应的事件发出

AFNetworkingTaskDidResumeNotification

AFNetworkingTaskDidSuspendNotification

对于task用KVO的方式去监听Progress

代理模式

AFURLSessionManagerTaskDelegate 是AF对自己的逻辑封装,同时实现了NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate

同时通过实现NSURLSessionDelegate,来接受session级别的事件。



流程图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: