All Projects → sunjie19921111 → SSJNetWork

sunjie19921111 / SSJNetWork

Licence: MIT license
对AFNetWorking 二次封装 实现自动取消网络请求,网络请求缓冲,网络请求日志详细打印(代码还有不成熟的地方,如使用请下载到本地使用,如果问题,好及时修改)

Programming Languages

objective c
16641 projects - #2 most used programming language
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to SSJNetWork

Webhere
HTML scraping for Objective-C.
Stars: ✭ 16 (-48.39%)
Mutual labels:  afnetworking
Wwnetworkhelper
AFN层级更高的网络请求API
Stars: ✭ 111 (+258.06%)
Mutual labels:  afnetworking
Afnetworking Retrypolicy
Nice category that adds the ability to set the retry interval, retry count and progressiveness.
Stars: ✭ 197 (+535.48%)
Mutual labels:  afnetworking
Xmnetworking
A lightweight but powerful network library with simplified and expressive syntax based on AFNetworking.
Stars: ✭ 980 (+3061.29%)
Mutual labels:  afnetworking
Bdboauth1manager
OAuth 1.0a library for AFNetworking 2.x
Stars: ✭ 101 (+225.81%)
Mutual labels:  afnetworking
Ppnetworkhelper
AFNetworking 3.x 与YYCache封装
Stars: ✭ 1,586 (+5016.13%)
Mutual labels:  afnetworking
Hlnetworking
基于AFNetworking的高阶网络请求管理器
Stars: ✭ 276 (+790.32%)
Mutual labels:  afnetworking
AJNetworking
AFNetworking 3.0 版本的封装,结合MJExtension框架处理JSON序列化问题
Stars: ✭ 35 (+12.9%)
Mutual labels:  afnetworking
Lcnetwork
基于AFNetworking的网络库封装
Stars: ✭ 107 (+245.16%)
Mutual labels:  afnetworking
Zbnetworking
AFNetworking4.X封装 GET/POST /PUT/PATCH /DELETE / Upload /DownLoad 网络请求 添加了请求缓存,断点下载,显示缓存大小,删除缓存,取消当前请求等功能
Stars: ✭ 186 (+500%)
Mutual labels:  afnetworking
Afhttpclientlogger
Configurable HTTP request logger for AFNetworking
Stars: ✭ 40 (+29.03%)
Mutual labels:  afnetworking
Mvvmdemo
MVVMDemo With ReactiveCocoa
Stars: ✭ 60 (+93.55%)
Mutual labels:  afnetworking
Pgnetworkhelper
PINCache做为AFNetworking缓存层,将AFNetworking请求的数据缓存起来,支持取消当前网络请求,以及取消所有的网络请求,除了常用的Get,Post方法,也将上传图片以及下载文件进行了封装,同样支持同步请求,使用方法极其简单。
Stars: ✭ 131 (+322.58%)
Mutual labels:  afnetworking
Mhdevelopexample objective c
🔥🔥🔥 iOS开发技术要点汇总,核心功能配备文档。表情键盘布局、大文件分片上传、基于MVC的基类设计、MVVM+RAC实践、微信朋友圈实现方案等。
Stars: ✭ 937 (+2922.58%)
Mutual labels:  afnetworking
Sjnetwork
SJNetwork is a high level network request tool based on AFNetworking and inspired on YTKNetwork.
Stars: ✭ 231 (+645.16%)
Mutual labels:  afnetworking
Netfox
A lightweight, one line setup, iOS / OSX network debugging library! 🦊
Stars: ✭ 3,188 (+10183.87%)
Mutual labels:  afnetworking
Opensource
♨️ 分享GitHub优秀开源项目和主流开发使用的网站、解决问题方案收集以及学习网站或资料,涵盖了iOS, macOS X, Blockchain, Flutter, Weex, H5, Games, C++, Script等多方面的内容,其中iOS大致包涵以下内容:音视频;IM和直播;逆向开发;图像相关(OpenGL, Metal, GPUImage);内购(IAP), ApplePay和第三方支付;安全攻防和应用加固, 数据安全和算法;常用第三方库;导航栏和状态栏;侧边菜单;数据持久;蓝牙, 手势指纹面容ID解锁, 图片浏览器, 扫码, 下拉和上拉刷新, 指示器, Toast, Menu, Sensor, Privacy, WebView和进度条, 动画, 选择器, 搜索, 分享, 图片验证码, 设备相关信息, 广告, 高仿项目及Demo等。
Stars: ✭ 123 (+296.77%)
Mutual labels:  afnetworking
GoogleMapsHelper
An easy to integrate Model Based Google Maps Helper (SVHTTPClient, AFNetworking) That lets you Geo Code , Reverse Geocode, Get Directions , Places Autocomplete.
Stars: ✭ 21 (-32.26%)
Mutual labels:  afnetworking
WormholyForObjectiveC
Network debugging made easy,This network debugging tool is developed based on the swift version of Wormholy.
Stars: ✭ 21 (-32.26%)
Mutual labels:  afnetworking
Afnetworking Synchronous
Synchronous requests for AFNetworking 1.x, 2.x, and 3.x
Stars: ✭ 157 (+406.45%)
Mutual labels:  afnetworking

SSJNetWork

对AFNetWorking 二次封装 实现自动取消网络请求,网络请求缓冲,网络请求日志详细打印

特性

  • 支持缓存写入模式、读取模式、有效时长等自定义配置 (同时享有来着 YYCache 的优越性能)
  • 支持按版本号缓存网络请求内容
  • 支持按时间缓存网络请求内容
  • 自动取消网络请求
  • 支持 Block 回调方式
  • 代码层级简单,便于功能拓展 -使用NetworkEye记录网络请求和请求日志

安装

第一种方式:

  1. 下载 SSJNetWork 文件夹所有内容并且拖入你的工程中。

第二种方式: pod 'SSJNetWork'

请pod导入这些依赖库

pod 'YYCache'
pod 'FMDB/SQLCipher', '~> 2.5'
pod 'AFNetworking', '~>3.1.0'

用法

可下载 DEMO 查看示例。

基本使用

1、第一步

请配置SJNetWorkConfig参数

2、第二步

####第一种封装方式

封装SJApiRequestManager如demo中: NSObject (SJNetWork)

//封装post请求

- (void)POST:(NSString *)URLString parameters:(id)parameter completion:(void (^)(NSError * _Nonnull, id _Nonnull))completion {
    SJNetworkRequestConfig *config = [[SJNetworkRequestConfig alloc] init];
    config.method = @"POST";
    config.urlString = URLString;
    config.params = parameter;
    [self networkRequestConfig:config completion:completion];
}

//封装get请求

- (void)GET:(NSString *)URLString parameters:(id)parameter completion:(void (^)(NSError * _Nonnull, id _Nonnull))completion {
    SJNetworkRequestConfig *config = [[SJNetworkRequestConfig alloc] init];
    config.method = @"GET";
    config.urlString = URLString;
    config.params = parameter;
    [self networkRequestConfig:config completion:completion];
}

//封装自定义参数请求

- (void)networkRequestConfig:(SJNetworkRequestConfig *)config completion:(void (^)(NSError * _Nonnull, id _Nonnull))completion {
    config.className = NSStringFromClass(self.class);
    [[SJApiRequestManager requestManager] sj_networkRequestConfig:config completion:^(NSError * _Nonnull error, id  _Nonnull responseObject) {
    //一些错误提示处理
    if (error.code == SJApiManagerErrorTypeNoNetWork) {
        //错误提示
    } else if (error.code == SJApiManagerErrorTypeTimeOut) {
        //错误提示
    }
    if (completion) {
        completion(error,completion);
    }
}];

//第二种封装方式


@implementation SXRequestService

- (void)POST:(NSString *)URLString parameters:(id)parameter className:(NSString *)clsName  completion:(void (^)(NSError * _Nonnull, id _Nonnull))completion {
    [self method:@"POST" ClassName:clsName urlsString:URLString parameters:parameter completion:completion];
}

- (void)GET:(NSString *)URLString parameters:(id)parameter className:(NSString *)clsName completion:(void (^)(NSError * _Nonnull, id _Nonnull))completion {
    [self method:@"GET" ClassName:clsName urlsString:URLString parameters:parameter completion:completion];
}

- (void)method:(NSString *)method ClassName:(NSString *)className urlsString:(NSString *)urlString parameters:(id)parameters completion:(void (^)(NSError * _Nonnull, id _Nonnull))completion {
    SJNetworkRequestConfig *requestConfig = [[SJNetworkRequestConfig alloc] init];
    equestConfig.method = method;
    requestConfig.className = className;
    requestConfig.urlString = urlString;
    requestConfig.params = parameters;
    [self networkRequestConfig:requestConfig completion:completion];
}

- (void)networkRequestConfig:(SJNetworkRequestConfig *)config  completion:(void (^)(NSError * _Nonnull, id _Nonnull))completion {
[[SJApiRequestManager requestManager] sj_networkRequestConfig:config completion:^(NSError * _Nonnull error, id  _Nonnull responseObject) {
    //一些错误提示处理
    if (error.code == SJApiManagerErrorTypeNoNetWork) {
    //错误提示
    } else if (error.code == SJApiManagerErrorTypeTimeOut) {
    //错误提示
    }
    if (completion) {
    completion(error,completion);
    }
}];}

@end

第一种的比第二种的优势在于不用传className(类名),和初始化,具体使用那种,请开发者自行选择

3、第三步

封装每个类对应的serice处理网络各自的网络请求 如demo中:

#define kHomeUrl  @"https://news-at.zhihu.com/api/4/news/9710114"

@interface SJHomeRequestService ()

@property (nonatomic, assign) SJHomeViewController *vc;

@end

@implementation SJHomeRequestService

- (instancetype)initWitHomeVC:(SJHomeViewController *)vc {
    if (self = [super init]) {
    self.vc = vc;
    }
    return self;
}

- (void)getHomeRequestUserId:(NSString *)userId completion:(nonnull void (^)(NSError * _Nonnull, id _Nonnull))completion{
//
//    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:1];
//    [params setObject:userId forKey:@"userId"]

[self.vc GET:kHomeUrl parameters:nil completion:^(NSError * _Nonnull error, id  _Nonnull responseObject) {
//转化成对应的模型回调
    if (completion) {
    completion(error,responseObject);
    }
}];
}

@end

3、第四步

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self setupConfigurator];
    [self loadData];
}

- (void)setupConfigurator {
    _requestService = [[SJHomeRequestService alloc] initWitHomeVC:self];
}

- (void)loadData {
    / /回调什么具体可以自己在block里面定义
    [_requestService getHomeRequestUserId:@"123" completion:^(NSError * _Nonnull error, id  _Nonnull responseObject) {
    NSLog(@"请求数据成功");
}];;
}

缓存处理

缓存处理配置都在SJNetWorkConfig和SJNetworkRequestConfig类中,支持以下配置:

  • 内存/磁盘存储方式
  • 缓存的有效时长
  • 根据请求shouldAllIgnoreCache判断是否需要缓存
  • 以及直接配置 YYCache
  • 支持缓冲最大数量(采用YYCache LRU算法)
  • 缓存的版本

自动取消网络请求

采用AOP hook方式自动取消网络请求


swizzling_exchangeMethod([self class],@selector(popViewControllerAnimated:), @selector(ssj_popViewControllerAnimated:));
swizzling_exchangeMethod([self class],@selector(popToRootViewControllerAnimated:), @selector(ssj_popToRootViewControllerAnimated:));
swizzling_exchangeMethod([self class],@selector(popToViewController:animated:), @selector(ssj_popToViewController:animated:));
swizzling_exchangeMethod([self class],@selector(dismissViewControllerAnimated:completion:), @selector(ssj_dismissViewControllerAnimated:completion:));

请配置 SJNetworkRequestConfigz 中 className 如不传入参数网络请求对应vc的className,则自动取消网络请求无效 自动取消网络请求根据的的是,视图pop和dismiss的时候取消当前VC下所有的网络请求设计的 (具体实现可参照demo种:NSObject+SSJNetWork 和SSJRequestService 任选一种)

Log日志打印和Log日志Sql记录

SJNetWorkConfig变量配置,

dubugLogeEnable:请求完成控制台直接输出 SQLLogEnable:记录在sql提高跳转到vc的时候展示 ne_sqlitePassword:log日志数据库密码 ne_saveRequestMaxCount:保存请求的最大个数

参考源码:YTKNetwork CTNetworking

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].