AFNetworking3.0使用

其实大量参考了其他文章,但是这篇博客是我写的。

编辑于2016/01/04

github地址:https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-3.0-Migration-Guide#new-requirements-ios-7-mac-os-x-109-watchos-2-tvos-9--xcode-7

下面是AFNetworking的两个参考地址:

http://www.jianshu.com/p/047463a7ce9b

http://www.open-open.com/lib/view/open1436603781395.html

AFNetworking 3.0.4是目前AFNetworking的最新版。可以使用pod search AFNetworking查看最新可使用的版本.

3.0版本正式支持iOS7,Mac OS X的10.9,watch OS 2,tvOS 9和Xcode 7.适配其他版本请参考第一个文档.


AFNetworking有以下特点:

1.之前版本基于NSURLConnection的API已经全部弃用,改为使用基于NSURLSession的API。

注:NSURLConnection的api已正式被苹果弃用,虽然该API将继续运行,但将没有新功能将被添加。苹果建议所有的项目迁移到基于NSURLSession的api。

2.下面几个接口已经被废弃:

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

    3.0的核心类为AFHTTPSessionManager.

3.有一些UI相关的类已经被重构过。

  • UIImageView+AFNetworking
  • UIWebView+AFNetworking
  • UIButton+AFNetworking

图片缓存的方法包括在内。


AFNetworking3.0的方法要更加直观简洁,我都觉得基本不用再进一步封装了(之前的2.0我都会先封装一次)。简单的请求直接就是网址+参数的形式。文件上传只是增加了一个新的接口而已。

话不多说,直接看接口吧:核心类是AFHTTPSessionManager

 
  
  1. //单例的接口
  2. + (instancetype)manager;
  3. //将get与post请求用不同的方法,还是很有爱的,下面的参数无需多说了
  4. - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
  5.                             parameters:(nullable id)parameters
  6.                               progress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
  7.                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
  8.                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;
  9. //注意多了一个block,这个代理可以用来添加你要上传的数据
  10. - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
  11.                    parameters:(nullable id)parameters
  12.     constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block
  13.                       success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
  14.                       failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

好了,上面的内容只涉及POST请求,因为其他请求的形式其实完全一样,到AFHTTPSessionManager.h文件看一眼就知道了。不过这里说一下上传文件的用法:

 
   
  1.    [manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
  2.        //如果需要上传文件使用该方法
  3.        [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/jpeg"];
  4.    } progress:^(NSProgress * _Nonnull uploadProgress) {
  5.        
  6.    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
  7.        
  8.    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  9.        
  10.    }];

注意这里的formData是可变的,所以可以添加多组数据。是不是很方便?

不过这个最后一个参数mimeType 表示了上传的类型,如果你不知道这个类型怎么用字符串表示的话,请前往下面的网址参考:

http://www.iana.org/assignments/media-types/media-types.xhtml

我相信你不会太晕的。


你可能感兴趣的:(iOS开发)