在我的iOS应用程序中,我将特定数据(包含缓存模型的Realm DB)保存在设备的缓存目录中的磁盘上。 当用户使用应用程序时,缓存数据会增加,因此我希望定期清除旧的缓存数据。
问题是我不知道如何检查我正在删除的模型是否被当前视图使用。 (通过尝试删除所有模型,我收到错误,告知当前视图使用的某些模型对象无效。)
为了确保我正在删除的缓存模型当前未被使用,我当前正在清理应用程序终止时的缓存:
- (void)applicationWillTerminate:(UIApplication *)application {
[[ModelManager sharedInstance] deleteUnusedCacheModels];
}
deleteUnusedCacheModels中的示例代码:
NSDate* limitDate = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0 * 7.0)];
RLMResults* modelProductListArray = [ModelProductList objectsInRealm:_cacheDb
where:@"modelUpdate < %@ || modelDelete = %@", limitDate, @YES];
[_cacheDb deleteObjects:modelProductListArray];
但是,如果用户不经常终止应用程序,则不会执行此代码。 (大多数用户将应用程序保留在后台。)
是否有更好的方法来清理缓存的模型数据?
感谢。
答案 0 :(得分:1)
我最终得到了以下解决方案。
模型中的实现:
在服务器请求上回收缓存模型的策略:
在以下时间删除缓存:
使用这样的代码:
NSDate* limitDate = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0 * 7.0)];
RLMResults* modelProductListArray = [ModelProductList objectsInRealm:_cacheDb
where:@"modelUpdate < %@ || modelDelete = YES", limitDate];
[_cacheDb deleteObjects:modelProductListArray];