框架的封装

作者: iOS_Alex | 来源:发表于2016-08-18 13:20 被阅读169次

对于第三方库的封装

MJExtension

AFNetworking

使用Category进行封装

唯一要注意的地方

JSON解析插件

ESJsonFormat

XWJsonToCode

对于第三方库的封装

对于第三方类库的使用,尽量使用Category进行封装,让第三方类库只暴露一个接口给程序代码。

以尽量减少第三方代码对于程序的侵染性为主要原则。

这样可以防止切换第三方框架时,而导致的诸多不便。

MJExtension

关于解析操作,在github上有很多成熟的框架可供选择。例如MantleJSONModel等。 这两个框架出现的较早。

MJExtension是中国人编写的MJExtension,是最近在国内最流行的解析框架。

吸取了前两款框架的优点并进行了改进, 官方文档是中文的,同学们自己查看。

#import"MJExtension.h"

/*

1.MJ对于JSON数据的根类型是数组或者字典,有不同的解析方法

2.原则上,要尽量减少第三方框架对于源码的侵染,应该只留一个接口,这样可以预防需求变更时的大批量改动

*/

@interfaceNSObject(MJExtension)

+ (id)parse:(id)responseObj;

@end

@implementationNSObject(MJExtension)

+ (id)parse:(id)responseObj{

if([responseObj isKindOfClass:[NSArrayclass]]) {

return[selfmj_objectArrayWithKeyValuesArray:responseObj];

}

if([responseObj isKindOfClass:[NSDictionaryclass]]) {

return[selfmj_objectWithKeyValues:responseObj];

}

returnresponseObj;

}

@end

AFNetworking

Github排名第一的网络请求框架。 多线程操作由NSOperation负责, 网络操作由NSURLSession负责。AFNetworking

官方文档虽然是英文的, 但是简单易懂, 都是干货。

使用Category进行封装

#import"AFNetworking.h"

#define kCompetionHandleBlock (void(^)(id model, NSError *error))completionHandle;

@interfaceNSObject(AFNetworking)

+ (id)GET:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*downloadProgress))downloadProgress completionHandle:(void(^)(idresponseObj,NSError*error))completionHandle;;;

+ (id)POST:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*downloadProgress))downloadProgress completionHandle:(void(^)(idresponseObj,NSError*error))completionHandle;

@end

#import"NSObject+AFNetworking.h"

@implementationNSObject(AFNetworking)

+ (id)GET:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*))downloadProgress completionHandle:(void(^)(id,NSError*))completionHandle{

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//设置允许相应的内容类型

#warning 如果没写, 可能会出现错误打印 unacceptable contentType: ....

manager.responseSerializer.acceptableContentTypes= [NSSetsetWithArray:@[@"text/html",@"text/plain",@"text/json",@"text/javascript",@"application/json"]];

//请求超时时间(默认60秒),请求缓存策略

manager.requestSerializer.timeoutInterval=30;

//manager.requestSerializer.cachePolicy = 0;

return[manager GET:path parameters:parameters progress:downloadProgress success:^(NSURLSessionDataTask* _Nonnull task,id_Nullable responseObject) {

completionHandle(responseObject,nil);

} failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

completionHandle(nil, error);

NSLog(@"error %@", error);

}];

}

+ (id)POST:(NSString*)path parameters:(id)parameters progress:(void(^)(NSProgress*))downloadProgress completionHandle:(void(^)(id,NSError*))completionHandle{

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer.acceptableContentTypes= [NSSetsetWithArray:@[@"text/html",@"text/plain",@"text/json",@"text/javascript",@"application/json"]];

//请求超时时间(默认60秒),请求缓存策略

manager.requestSerializer.timeoutInterval=30;

//manager.requestSerializer.cachePolicy = 0;

return[manager POST:path parameters:parameters progress:downloadProgress success:^(NSURLSessionDataTask* _Nonnull task,id_Nullable responseObject) {

completionHandle(responseObject,nil);

} failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

completionHandle(nil, error);

NSLog(@"error %@", error);

}];

}

@end

唯一要注意的地方

需要对AF的接受内容类型进行设置,AF默认只能支持application/json内容模式

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithArray:@[@"text/html", @"text/plain", @"text/json", @"text/javascript", @"application/json"]];

JSON解析插件

两款插件都是中国人写的, 官方文档是中文的, 自己点击链接查看。

ESJsonFormat

ESJsonFormat

XWJsonToCode

XWJsonToCode

相关文章

  • 核心代码实现core.js

    1.框架封装 很多人不明白框架封装的原理。最近刚刚学了可框架封装,这里我打算总结一下我的心得。 首先,看下我们要达...

  • 框架的封装

    对于第三方库的封装 MJExtension AFNetworking 使用Category进行封装 唯一要注意的地...

  • 框架封装

    Android 组件化 —— 路由设计最佳实践 业界最简单高效的路由方案 OkDeepLink被人忽视的面向对象的...

  • 图片加载框架的封装

    如何正确的使用图片加载框架? 封装!!! 别在图片需要加载时直接使用图片加载框架应该封装这个框架之后再间接使用 比...

  • 完美运动框架

    完美运动框架封装 完美运动框架调用 封装完美运动框架遇到的问题? 1.timer问题如果我们只保存一个timer变...

  • flutter网络请求封装

    Flutter 网络请求框架封装

  • 初识Struts2

    框架:一组可重用代码的封装 struts2框架: 是mvc结构的封装框架 实现请求-响应过程中的功能处理 请求-响...

  • iOS 封装

    ios什么是封装及封装细节 写好自己的框架,该框架实现固定的功能. 将该框架单独拿出来进行不断的更新修改,提供给比...

  • iOS网络框架简单封装

    AFN 简单封装--iOS重构-轻量级的网络请求封装实践 YTKNetworking 网络框架封装源码解析:网络层...

  • java搜索引擎数据挖掘

    1、内存的数据是暂时存放数据,磁盘中的数据是永久储存数据2、学会封装框架和自定义控件,用框架还要会封装框架社会招聘...

网友评论

    本文标题:框架的封装

    本文链接:https://www.haomeiwen.com/subject/cqyvsttx.html