MKNetworkKit自定义缓存有效时间

MKNetworkkit是一个非常好用、轻量的网络请求框架。可以支持自动缓存。

但是在某些情况下,我们要求数据可以实时被更新,比如下单之后,订单状态的刷新、商品状态的刷新等。

MKNetworkkit有一个用于控制缓存有效时间的变量,叫MKNetworkKitDefaultCacheDuration。这个变量在MKNetworkKit.h中被预定义

//  MKNetworkKit.h
#define kMKNetworkKitDefaultCacheDuration 60 // 1 minute

我们全局搜索后可以发现这个变量在MKNetworkOperation.m中被使用

expiresOnDate = [[NSDate date] dateByAddingTimeInterval:kMKNetworkKitDefaultCacheDuration];

由此可知,这个expiresOnDate就是用来控制缓存生命周期的变量。

如果需要自定义缓存时间,可以自定义一个MKNetworkOperation的子类。这里为了简单演示,就直接在MKNetworkOperation类里面修改。

首先在MKNetworkOperation.h文件定义property的地方写上

@property (nonatomic, strong) NSString *customExpireTime;
//if it is not nil,replace default expire time with this

然后找到这行代码的位置

expiresOnDate = [[NSDate date] dateByAddingTimeInterval:kMKNetworkKitDefaultCacheDuration];

并把它修改为

if (self.customExpireTime) {
    int expireSeconds = [self.customExpireTime intValue];
    expiresOnDate = [[NSDate date] dateByAddingTimeInterval:expireSeconds];
}
else{
    expiresOnDate = [[NSDate date] dateByAddingTimeInterval:kMKNetworkKitDefaultCacheDuration];
}

在使用的时候,如果需要自定义缓存有效时间的话,只需要加上这样一行代码

netOp = [appDelegate.netEngine operationWithPath:path];
//加上下面这行代码,自定义缓存有效时间.
netOp.customExpireTime = [NSString stringWithFormat:@"%d",2];

当然,为了保证源代码的完整性,以及方便将来更新MKNetworkKit,还是推荐自定义一个MKNetworkOperation的子类来完成相同的功能。

时间: 2024-11-06 10:47:31

MKNetworkKit自定义缓存有效时间的相关文章

借鉴dubbo实现自定义缓存

自定义缓存一般基于ConcurrentMap实现,实现缓存需要注意的点是缓存容器对象 本身依赖于 static final去存储对象,样例: ConcurrentMap<String, GenericServiceCache> cacheHolder = new ConcurrentHashMap<String, GenericServiceCache>();.虚拟机会在内存加载时 有特殊的初始化,如果通过类似单例方式创建对象会导致需要同步,而同步在高并发下导致性能变差, 更好的缓

MVC 使用自定义缓存

MVC使用自定义缓存:首先我是在一个工具类库中新建一个缓存帮助类,比如这里我在Itcast.CMS.Common 类库中新建了一个CacheHelper.cs类 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; namespace

自定义缓存Memcache 以及Cache

*****缓存存储配置项(读缓存和appsetting配直节点的问题 )***** MemCache经常用于数据不用经常改动的数据 不用每次都去数据库中读取,可以防止在系统的缓存中,缓存在内存中读取速度快,但是memcache(是可以分布的缓存)没有保存机制,服务器挂掉,memcache丢失 系统的配置节放在了appsettings配置节下  <add key=”mingzi” value=”assas” /> ConfigurationManager.appsetting[“mingzi”]

【.net 深呼吸】自定义缓存配置(非Web项目)

在前一篇烂文中,老周简单讲述了非Web应用的缓存技术的基本用法.其实嘛,使用系统默认方案已经满足我们的需求了,不过,如果你真想自己来配置缓存,也是可以的. 缓存的自定义配置可以有两种方案,一种是用代码在应用程序中配置,即实例化MemoryCache对象时,可以向构造函数传递一个NameValueCollection实例,数据结构就是key-value形式,这些配置项的名字其实就是MemoryCacheElement类的以下三个属性:CacheMemoryLimitMegabytes.Physic

Mybatis源码分析自定义缓存、分页的实现

一.缓存 我们知道,在Mybatis中是有缓存实现的.分一级缓存和二级缓存,不过一级缓存其实没啥用.因为我们知道它是基于sqlSession的,而sqlSession在每一次的方法执行时都会被新创建.二级缓存是基于namespace,离开了它也是不行.有没有一种方式来提供自定义的缓存机制呢? 1.Executor Executor是Mybatis中的执行器.所有的查询就是调用它的<E> List<E> query()方法.我们就可以在这里进行拦截,不让它执行后面的查询动作, 直接从

laravel自定义缓存memcache(自带memcached,windows不支持)

1.首先弄清楚memcache和memcached的区别(自行搜索) 2.安装memcache服务端(参照https://www.cnblogs.com/winstonsias/p/10190745.html)及php扩展(参照https://www.cnblogs.com/winstonsias/p/10193781.html) 3.添加服务提供类 MemcacheServiceProvider ,记得在app.php配置文件添加提供者注册 1 namespace App\Providers;

webapi 自定义缓存实现

定义一个Filter public class MyOutputCacheAttribute : ActionFilterAttribute { MemoryCacheDefault _cache = new MemoryCacheDefault(); /// <summary> /// 客户端缓存(用户代理)缓存相对过期时间 /// </summary> public int ClientCacheExpiration { set; get; } /// <summary&

redis自定义缓存

1 import weakref, collections 2 import time 3 4 5 class LocalCache(): 6 notFound = object() 7 8 class Dict(dict): 9 def __del__(self): 10 pass 11 12 def __init__(self,maxlen=20): 13 self.weak = weakref.WeakKeyDictionary() 14 self.strong=collections.d

自定义缓存实现ConcurrentHashMap

1.基本使用 1>.创建Input <input id="color" placeholder="Select Color..." /> <link href="@Url.Content("~/Content/kendo/2014.1.318/kendo.common.min.css")" rel="stylesheet" type="text/css" />