- 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 对象,然后看有没提供对应的方法或属性可设置该格式。
像类似的网络请求header
和user-agent
都应该在自己的代码里设置!
- 3.返回字符串而并非是json或xml格式,怎么解析?
开发中确实是存在奇葩的需求,还有可能返回一堆html
格式的String
,要截取Sting
里的某个key
。对于处理不了的格式,afn
有可能error
回调。
用AFHTTPSessionManager,我没找到未解析的字符(知道的朋友可以告诉我,谢谢)。最后还是用了AFHTTPRequestOperationManager
operation.responseString
即为未格式化的字符