【发布时间】:2015-02-19 12:54:04
【问题描述】:
在我的 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];
但如果用户不经常终止应用程序,则不会执行此代码。 (大多数用户将应用程序留在后台。)
有没有更好的方法来清理缓存的模型数据?
谢谢。
【问题讨论】:
-
可能在应用启动时清除缓存?
-
你的意思是 didFinishLaunchingWithOptions 吗?是的,也许它比 applicationWillTerminate 更好。但我认为它不需要后台应用程序。
-
基本上,当您保证没有对存储在数据库中的对象的强引用时,您只想清理该缓存,并且遵守该标准的最简单方法是在任何东西从数据库中获得对对象的引用之前清除缓存。
-
没错。谢谢:)