zoukankan      html  css  js  c++  java
  • iOS开发-AFNetworking

    一、通过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级别的事件。

     

     

    流程图

  • 相关阅读:
    machine learning(11) -- classification: advanced optimization 去求cost function最小值的方法
    machine learning(10) -- classification:logistic regression cost function 和 使用 gradient descent to minimize cost function
    machine learning(9) -- classification:Decision boundary
    machine learning(8) -- classification
    day 23 对象的名称空间 类,对象属性和方法 封装 接口提供
    day 22 面向对象 类与对象 名称空间操作
    day 21 内存管理,正则
    day 14 三元运算符,列表字典推导式,递归,匿名函数,内置函数(排序,映射,过滤,合并)
    day 17 项目开发常用模块
    前端之jQuery
  • 原文地址:https://www.cnblogs.com/loying/p/5251452.html
Copyright © 2011-2022 走看看