基于二次封装网络框架的网络层迁移

基于二次封装网络框架的网络层迁移

话说苹果的东西封闭就算了,还是强制性的,今天刚上班,群里不停有人发这鬼东西:



我当时真想对苹果竖起我的中指,然后说一句正宗的美式腔调的英语:are you fucking kidding me!! 不过估计到时候不进行代码迁移的话估计就不能兼容IPV6-only标准了,然后就不能上架appstore.可怜我还在用着NSURLConnection的废弃api,没办法了,只能迁移了,可是有不少同学可能跟我处于一个比较尴尬的境地,如果我们只是单纯的自己对AF进行封装,只要升级AF到3.0以上,就可以满足苹果的要求了,但是如果我们用来一些对AF二次封装的框架,就显得比较麻烦了,例如有的同学会用唐巧的猿题库网络框架,这些框架都是没有迁移到AF3.0的,这篇文章,我会以一个GJNetWorking的库讲解一下我的迁移经历.
我们来对比一下2.x和3.x都发生了什么变化:

AF2.x ![AF3.x](http://upload-images.jianshu.io/upload_images/1145379-a3d25f21d416e8f7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

由此可见:被苹果官方废弃的NSURLConnection已经被AF删掉了.所以我们应该面向AFHTTPSessionManager编程 而非AFHTTPRequestOperationManager.
介绍一下GJNetWorking,当时使用它来进行项目开发 主要是因为代码比较简洁,支持网络缓存,支持mjestension和mantle的模型映射.我们进行升级AF,主要是对GJHTTPManager GJBaseRequest GJModelRequest这几个类进行代码修改.在GJHTTPManager中使用AFHTTPSessionManager替换掉原来的AFHTTPRequestOperationManager

//原来的AFHTTPRequestOperationManager
AFHTTPRequestOperation *startOperation = nil;

switch (method) {
case GJRequestGET:
{
startOperation = [self.manager GET:url
            parameters:parameters
               success:^(AFHTTPRequestOperation *operation, id responseObject) {
                   [self requestFinishedWithOperation:operation request:request];
               } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                   [self requestFinishedWithOperation:operation request:request];
             }];
}
break;
//修改后的的AFHTTPSessionManager

    NSURLSessionDataTask *startOperation = nil;
    
    switch (method) {
        case GJRequestGET:
        {
            
            
            startOperation = [self.manager GET:url parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                [self requestFinishedWithOperation:task request:request resonseObj:responseObject];

            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                [self requestFinishedWithOperation:task request:request resonseObj:nil];

            }];
            
        }
            break;

不过比较难的是响应数据的处理,由于在2.0时代作者使用AFHTTPRequestOperation作为返回的结果处理缓存 和模型映射,3.0中这已经被删除了,所以我们只能换一种思路:直接处理从AFHTTPSessionManager


- (NSURLSessionDataTask *)GET:(NSString *)URLString
                   parameters:(id)parameters
                      success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                      failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure```
方法中返回的responseObject.
GJBaseRequest中增加方法实现
  • (void)requestCompletedWithModel:(id)model;

GJModelRequest中修改方法实现
  • (void)requestCompletedWithObj:(id)obj andModelObjBlock:(void (^)(id model))modelBlock{

    [super requestCompletedWithObj:obj andModelObjBlock:modelBlock];

    BOOL success = !self.error;

    id responseStatus;
    id responseObject = obj;

    //if request success and request implement modelClass,
    //when request or default modelMaker implement the delegate ,
    //the response object will be make to model or model list.
    if (success && [self respondsToSelector:@selector(modelClass)]){
    Class defaultModelMaker = [GJNetworkingConfig modelMaker];
    Class modelMaker = nil;
    if (self && [[self class] respondsToSelector:@selector(makeModelWithJSON:class:status:)] &&
    [[self class] conformsToProtocol:@protocol(GJModelMakerDelegate)]) {
    modelMaker = [self class];
    }
    else if (defaultModelMaker && [defaultModelMaker respondsToSelector:@selector(makeModelWithJSON:class:status:)] &&
    [defaultModelMaker conformsToProtocol:@protocol(GJModelMakerDelegate)]){
    modelMaker = defaultModelMaker;
    }

      if (modelMaker) {
          id model = [modelMaker makeModelWithJSON:responseObject
                                                       class:[self modelClass]
                                                      status:&responseStatus];
          
          modelBlock(model);
          self.status = responseStatus;
      }
    

    }

}


好了大公告成:

![](http://upload-images.jianshu.io/upload_images/1145379-62f7c4feaf7b0625.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](http://upload-images.jianshu.io/upload_images/1145379-4d3dd42f73f4e311.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
good boy!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 在苹果彻底弃用NSURLConnection之后自己总结的一个网上的内容,加上自己写的小Demo,很多都是借鉴网络...
    付寒宇阅读 4,278评论 2 13
  • 写在开头: 大概回忆下,之前我们讲了AFNetworking整个网络请求的流程,包括request的拼接,sess...
    涂耀辉阅读 19,936评论 53 315
  • AFN什么是AFN全称是AFNetworking,是对NSURLConnection、NSURLSession的一...
    JonesCxy阅读 1,219评论 0 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,070评论 25 707
  • 2016.9.12 1.因为今天下午要在北京培训教室上成功第二要素不断进行邀约的课程,所以早晨起来就是备课,虽然之...
    宁昕阅读 258评论 0 0