iOS AFNetworking使用技巧与问题(持续更新)

  • 1.很多初学者,在每处用到网络请求的地方会直接�拿afn实例去请求�,从而带来了后续难以维护代码的问题
    [[AFHTTPSessionManager manager] POST:nil parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        
    }];

思考:如果afn不更新了,后续出现重大�bug适配问题,从而导致每处�用到afn的地方都要修改,请问怎么办?
答案:呵呵,只能一个个修改了!有人会说,怎么可能不更新,很多人用着呢,怕什么。那假设其他第三方也同样出现类型的问题呢?所以是不是应该有方法或某种思想去解决呢?

解决方法:写个网络基类HRHttpBase,提供两个方法:GET 与 POST,外面请求时,直接调用这两个方法,万一afn出了问题,只要修改这两个方法即可,从而减轻后续维护成本!这种做法�同样适用于其他的第三方库, 这也是一种开发思想。

HRHttpBase.h

HRHttpBase.m

假设业务复杂的话,如登录,涉及到第三方登录之类的,有比较多的网络请求,可以专门抽一个网络请求类要处理:

HRhttpLogin.h

HRhttpLogin.m

  • 2.�用到CocoaPods,但更改了afn代码问题

这是缺少text/html解析格式,请求网络时,只要添加上就行了,很多人在网上找到设置的地方(如下图)。但他忘了,项目用CocoaPods管理第三方库的,如果项目上线之前,同事更新了CocoaPods那么之前写的代码就没了!

解决办法:通过AFHTTPSessionManager实例找到AFHTTPResponseSerializer 对象,然后看有没提供对应的方法或属性可设置该格式。

像类似的网络请求headeruser-agent都应该在自己的代码里设置!

  • 3.返回字符串而并非是json或xml格式,怎么解析?

开发中确实是存在�奇葩的需求,还有可能返回一堆html格式的String,要截取Sting里的某个key。对于处理不了的格式,afn有可能error回调。

用AFHTTPSessionManager,我没找到未解析的字符(知道的朋友可以告诉我,谢谢)。最后还是用了AFHTTPRequestOperationManager

operation.responseString即为未格式化的字符

Paste_Image.png

ps:如果朋友们还有些奇怪的问题,可以回复我,一起解决!

文章同步到微信公众号:hans_iOS 有疑问可以在公众号里询问!

推荐阅读更多精彩内容

  • 一早起来满世界都是巧克力跟花,除了合照,美食,小礼物,朋友圈里全是腻歪的你爱他,他爱她,她爱他,他爱他,知道你们浓...
    半點婴儿肥阅读 23评论 0 0
  • 有些时候我们不希望把一些编译的东西提交到Git中,.gitignore可以方便管理我们不需要提交的文件,自动过滤设...
    等不来的期待阅读 52评论 0 0
  • 我不是一个狂热的乒乓球球迷,可能我只能算是纯路人粉吧。但身为中国人,乒乓球是我们国家的“国球”! 但凡有一点...
    orget阅读 626评论 17 5
  • 吃1、日本料理大连的日料整体水平不错,但价位不低,推荐的有红叶日本料理和鱼旨寿司红叶一定要去二七广场那家总店,比较...
    milkcold阅读 147评论 0 2