iOS开发-AFNetworking
2016-03-07 18:22
375 查看
一、通过AFHTTPSessionManager请求
1、创建managerAFHTTPSessionManager *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级别的事件。
流程图
相关文章推荐
- iOS项目模仿之喜马拉雅(三)—— 分段选择器实现
- iOS Mantle解析框架简单的使用入门(字典映射model)
- iOS中copy和mutableCopy
- iOS-BLE蓝牙开发持续更新
- IOS学习之蓝牙4.0
- iOS开发中本地几种存储方式
- ios开发——日常之iOS系统控件高度
- iOS中选择相册照片添加到应用程序中
- [iOS]监控屏幕旋转
- iOS 9 学习系列: Xcode Code Coverage
- iOS开发自动布局第三方Snapkit
- iOS开发多线程篇—GCD的常见用法
- iOS开发中控制屏幕旋转,个别界面强制横屏
- iOS-MultipeerConnectivity框架开发(二)(优化中。。。)
- iOS----------SDWebimage源码解析(1)
- iOS判断邮箱,手机号码,车牌号是否合法
- iOS游戏控制手柄
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- iOS 点击远程通知消息,如何跳转到指定页面(控制器)
- iOS图片裁剪