您的位置:首页 > 理论基础 > 计算机网络

iOS 【OC 封装网络请求业务类(AFHTTPRequestOperationManager 废弃)】

2016-01-27 22:19 531 查看
对于一些常用的第三方,他们常用,自然作者也会经常更新。这样一来或许会出现“牵一发而动全身的局面”。一旦一个方法、某个类出现了名称或者功能上的改动,那么如果在项目中多处地方引用了这个不稳定的第三方,是很麻烦的事情。下面我总结归纳了一下封装第三方框架调用的方法。

以AFNetworking为例,这是是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库。下面我们封装一下他的调用接口。

下面是我们封装的类WZYHTTPTool

//
//  WZYHTTPTool.h
//

#import <Foundation/Foundation.h>

@interface WZYHTTPTool : NSObject

+ (void)post:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

+ (void)get:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

@end

#import "WZYHTTPTool.h"
#import "AFNetworking.h"

@implementation WZYHTTPTool

+ (void)post:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure
{
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

[mgr POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}

+ (void)get:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure
{
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

[mgr GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}

@end


我们发现其实他和我们方法内部调用的AFHTTPRequestOperation的方法是很像的。是的,没错,就是很像,但这样起到了一个很好的保护作用。如果我们的AFNetworking发生了更新,那么受到影响的不过也就是我们的WZYHTTPTool这一个类而已,我们只需要在这个类中进行一系列的修改。这样保证了我们的项目源文件中没有直接和外来的第三方框架相接触。起到了保护的作用。下面展示一出项目中用到封装之后的WZYHTTPTool类的地方。
- (void)accessTokenWithCode:(NSString *)code
{
// 1、拼接请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];

params[@"client_id"] = @"717984953";
params[@"client_secret"] = @"afc15faec72d4b5d41d17d666dbdc39c";
params[@"grant_type"] = @"authorization_code";
params[@"code"] = code;
params[@"redirect_uri"] = @"http://";

// 2、发送请求
[WZYHTTPTool post:@"https://api.weibo.com/oauth2/access_token" params:params success:^(id json) {
[MBProgressHUD hideHUD];

WZYAccount *account = [WZYAccount accountWithDictionary:json];

// 存储账号信息
[WZYAccountTool saveAccount:account];

// 切换根控制器
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[window switchRootViewController];
} failure:^(NSError *error) {
WZYLog(@"请求失败-%@",error);
[MBProgressHUD hideHUD];
}];
}


在我们封装好的方法中,我们只需要将我们需要的参数传进来,传给block变量(传进来的是block里面那一大坨东西),可以理解成将他们搬到了另外一个类下执行。由此做到控制器不和第三方直接接触即可实现功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RequestOperationMgr