AFNetworking3.0升级记录2

简介

升级后基本没什么问题,现在把实现的主要流程上的改动贴上来(请结合我的上一篇文章查看)。
改动后网络层(包括文件上传的流程)并没有修改大的逻辑。

1.首先是一般网络POST请求的封装。

(1)首先是单例的实现基础设置:

+ (instancetype)sharedClient
{
    static NetworkSessionManager *_sharedClient = nil;
    static dispatch_once_t _onceTocken;
    dispatch_once(&_onceTocken, ^{
        if (appDelegate.apiBaseUrlStr) {
            _sharedClient = [[NetworkSessionManager alloc] initWithBaseURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",appDelegate.apiBaseUrlStr]]];
        } else {
            _sharedClient = [[NetworkSessionManager alloc] init];
        }
        
        _sharedClient.llOperationQueue = [[NSOperationQueue alloc] init];
        //最大并发数
        _sharedClient.llOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount;
        [_sharedClient.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
        [_sharedClient.requestSerializer setValue:ApiVersion forHTTPHeaderField:@"User-Agent"];
        [_sharedClient.requestSerializer setTimeoutInterval:30];
        _sharedClient.bstart = NO;
        _sharedClient.apiCount = 0;
    });
    
    return _sharedClient;
}

(2)POST请求对外接口:

- (NSURLSessionDataTask *)POST:(NSString *)URLString
                parameters:(id)parameters
                  progress:(void (^)(NSProgress * _Nonnull))uploadProgress
                success:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nonnull))success
                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
{
    if (![CommonClass checkNetworkRechable]) {
        failure(nil,[NSError errorWithDomain:@"www.mHealth.com" code:-1009 userInfo:nil]);
        return nil;
    }
    if((!appDelegate.apiBaseUrlStr || appDelegate.apiBaseUrlStr.length < 1) && !_bstart)
    {
#ifdef DEBUG_MODE
        NSLog(@"No baseurl, need network access");
#endif
        
        [self.llOperationQueue setSuspended:true];
        LandbalancerSessionOperation *llsessionOperation = [[LandbalancerSessionOperation alloc] initWithURLString:URLString parameters:parameters success:success failure:failure];
        [self.llOperationQueue addOperation:llsessionOperation];
        
        _bstart = true;
        [self requestApi];
        
        return nil;
    }
    else
    {
        return [super POST:URLString parameters:parameters progress:uploadProgress success:success failure:failure];
    }
}

核心的改动就是这些了,当然了,因为我们的程序网络调用不规范,经过几代人的手,有很多地方都有了各自的调用,还有同一套代码有多个app在使用,所以在修改的时候也免不了许多麻烦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,744评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,281评论 19 139
  • AFHTTPRequestOperationManager 网络传输协议UDP、TCP、Http、Socket、X...
    Carden阅读 5,104评论 0 12
  • 生死无常, 祸福无门; 知恩图报, 潜移默化; 世人皆知, 孰能坚守; 镜花水月, 良知不灭。
    大圣书斋阅读 323评论 0 4
  • 人不知而不愠,不亦君子乎 吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎? 见贤思齐焉,见不贤而内自省也...
    造一颗心阅读 229评论 0 0