【问题标题】:iOS app: When should I clear my cache data? (using Realm)iOS 应用程序:我应该什么时候清除我的缓存数据? (使用领域)
【发布时间】: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 更好。但我认为它不需要后台应用程序。
  • 基本上,当您保证没有对存储在数据库中的对象的强引用时,您只想清理该缓存,并且遵守该标准的最简单方法是在任何东西从数据库中获得对对象的引用之前清除缓存。
  • 没错。谢谢:)

标签: ios caching model realm


【解决方案1】:

我最终得到了以下解决方案。

模型中的实现:

  • 设置一个属性 NSDate* modelUpdate,指示模型的最后一次更新。对于旧时应删除的模型。
  • 在每个需要删除的模型中设置一个属性 BOOL modelDelete。 但不要在应用程序运行时删除任何内容。 (因此内存上的现有模型不会失效)

在服务器请求上回收缓存模型的策略:

  1. 检查给定服务器请求是否存在缓存模型列表(比如说缓存 A)。 (其中 modelDelete = NO)
  2. 并行,即使存在缓存,在后台运行对服务器的请求。
  3. 使用缓存 A 尽快向用户显示内容。 (不要让用户等待)
  4. 对服务器的请求完成后,将新结果保存到缓存中。 (缓存 B)
  5. 使用新数据更新用户所看到的内容,轻轻地使用淡入淡出等。
  6. 标记所有要删除的缓存A模型。 (modelDelete = YES)

在以下时间删除缓存:

  • 应用程序启动时。 (didFinishLaunchingWithOptions)
  • 应用程序终止时。 (applicationWillTerminate)

使用这样的代码:

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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2021-09-12
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    相关资源
    最近更新 更多