zoukankan      html  css  js  c++  java
  • AFNWorking网络工具类的抽取

    import <Foundation/Foundation.h>

    #import "AFNetworking.h"

    typedef void(^RequestSuccessCallback)(id responseObject);// 成功时候回调

    typedef void(^RequestFailedCallback)(NSError *error);    // 失败时候回调

    typedef void(^AllRequestCallback)();                     // 所有请求回调

    @interface YSHTTPHelper : NSObject

    /***  创建一个单例类 */

    + (YSHTTPHelper *)defaultHTTPHelper;

    /** 请求管理者 */

    @property (nonatomic, strong) AFHTTPRequestOperationManager *manager;

    /**

     *  POST请求

     *

     *  @param URLString  网络接口

     *  @param parameters 参数

     *  @param success    成功调用

     *  @param failure    失败时候调用

     */

    - (AFHTTPRequestOperation *)POST:(NSString *)URLString

                          parameters:(NSMutableDictionary *)parameters

                             SuccessCallback:(RequestSuccessCallback)successCallback

                     FailureCallback:(RequestFailedCallback)failureCallback

                  AllRequestCallback:(AllRequestCallback)allRequestCallback;

    /**

     *  GET请求

     *

     *  @param URLString  网络接口

     *  @param parameters 参数

     *  @param success    成功调用

     *  @param failure    失败时候调用

     */

    - (AFHTTPRequestOperation *)GET:(NSString *)URLString

                         parameters:(NSMutableDictionary *)parameters

                            SuccessCallback:(RequestSuccessCallback)successCallback

                            FailureCallback:(RequestFailedCallback)failureCallback

                 AllRequestCallback:(AllRequestCallback)allRequestCallback;

    #import "YSHTTPHelper.h"

    @implementation YSHTTPHelper

    - (instancetype)init

    {

        self = [super init];

        if (self)

        {

            _manager = [[AFHTTPRequestOperationManager alloc] init];

            

            _manager.requestSerializer = [AFHTTPRequestSerializer serializer];

            _manager.requestSerializer.timeoutInterval = 10.f;// 请求时长为10秒

            

            _manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];// 请求方式为JSON

        }

        return self;

    }

    /**

     *  单例的个人理解:如果这个实例等于空的时候再去创建

     *  官方:保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源

     *  优点:节约内存空间

     */

    + (YSHTTPHelper *)defaultHTTPHelper

    {

        static YSHTTPHelper *instances = nil;// 创建实例对象

        

        /**

         *  下面我们来看看dispatch_once的原理:

         *  dispatch_once主要是根据onceToken的值来决定怎么去执行代码。

         *  当onceToken= 0时,线程执行dispatch_once的block中代码

         *  当onceToken为其他值时,线程被线程被阻塞,等待onceToken值改变

         *  当线程首先调用shareInstance,某一线程要执行block中的代码时,首先需要改变onceToken的值,再去执行block中的代码。这里onceToken的值变为了140734731430192。

         *  这样当其他线程再获取onceToken的值时,值已经变为140734731430192。其他线程被阻塞。

         *  这样dispatch_once在首次调用时同步阻塞线程,生成单例之后,不再阻塞线程。dispatch_once是创建单例的最优方案

         *

         */

        static dispatch_once_t onceToken;// 创建线程锁

        dispatch_once(&onceToken, ^{

            instances = [[self alloc] init];// 当没有的时候去创建

        });

        return instances;

    }

    /**

     *  POST请求

     *

     *  @param URLString  网络接口

     *  @param parameters 参数

     *  @param success    成功调用

     *  @param failure    失败时候调用

     */

    - (AFHTTPRequestOperation *)POST:(NSString *)URLString

                          parameters:(NSMutableDictionary *)parameters

                     SuccessCallback:(RequestSuccessCallback)successCallback

                     FailureCallback:(RequestFailedCallback)failureCallback

                  AllRequestCallback:(AllRequestCallback)allRequestCallback

    {

        AFHTTPRequestOperation *operation = [self.manager POST:URLString parameters:parameters success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {

            

            if (successCallback)

            {

                successCallback(responseObject);

            }

            

            if (allRequestCallback)

            {

                allRequestCallback();

            }

        } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {

            

            if (failureCallback)

            {

                failureCallback(error);

            }

            

            if (allRequestCallback)

            {

                allRequestCallback();

            }

        }];

        

        return operation;

    }

    /**

     *  GET请求

     *

     *  @param URLString  网络接口

     *  @param parameters 参数

     *  @param success    成功调用

     *  @param failure    失败时候调用

     */

    - (AFHTTPRequestOperation *)GET:(NSString *)URLString

                         parameters:(NSMutableDictionary *)parameters

                    SuccessCallback:(RequestSuccessCallback)successCallback

                    FailureCallback:(RequestFailedCallback)failureCallback

                 AllRequestCallback:(AllRequestCallback)allRequestCallback

    {

        AFHTTPRequestOperation *operation = [self.manager GET:URLString parameters:parameters success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {

            这里可以做你后台返回来请求成功中失败的问题,

            if (successCallback)// 成功时候回调的Block {

                successCallback(responseObject);

            }

           

            if (allRequestCallback) // 请求成功或失败的回调

            {

                allRequestCallback();

            }

        } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {

            

            if (failureCallback)

            {

                failureCallback(error);

            }

            

            if (allRequestCallback)

            {

                allRequestCallback();

            }

        }];

        

        return operation;

    }

  • 相关阅读:
    17种高效选聘方法
    三招让你从求职者中脱颖而出(转)
    仓山有感
    同事就是同事,职场没有兄弟姐妹
    enable worker process
    央企
    关于IIS
    td
    About Application Pool
    iis 7 application pool
  • 原文地址:https://www.cnblogs.com/happyEveryData/p/5534041.html
Copyright © 2011-2022 走看看