应用程序更新后使缓存数据无效的最佳做法

时间:2017-06-25 15:23:09

标签: ios caching

我有一个iOS应用程序并发布了两次。为了更好地理解,我们将第一个版本称为public class Task { public int Id { get; set; } public string TaskText { get; set; } public DateTime TillDate { get; set; } public TaskState State { get; set; } } public enum TaskState { Active=1, Stoped, Complete } ,将第二个版本称为V1

UITableView显示从服务器获取的事件列表。为了获得更好的用户体验和性能,我将缓存从服务器下载的事件。因此,下次用户进入应用程序时,我可以立即显示带有缓存数据的事件列表,而不是加载指示符。

V2 app:表格视图单元格配置了一个NSDictionay事件并获取名称属性,如下所示:

V1

// Get the event name NSString *name = [event objectForKey:@"name"]; app:事件变得越来越复杂之后,我决定为该事件创建一个专用模型,让我们称之为V2并获取名称属性,如下所示:

Event

发布// Get the event name directly from Event model name property NSString *name = event.name 后,出现了问题。

这个V2应用崩溃了,因为它试图从V2 app

缓存的事件字典中读取name属性

我的问题是使缓存数据无效的策略或最佳做法。我想到了一些方法,但它们都有缺陷。

1)清除每个版本上的所有缓存数据。 无论我们的程序与上一版本应用程序有何不同,这是最安全的方式。但扔掉所有缓存的数据可能会反应过度。

2)编写更多代码以检查是否需要忽略缓存数据。 以我的V1 app为例。我可以编写代码来检查这样的缓存事件数据,以确保一切正常。

V2

此方法有效但有时// Validation code in V2 app if ([cachedEvent isKindOfClass:Event.calss]) { NSString *name = cached.name; // other code } else { // Ignore the cached event and fetch event from server } 是不够的,您必须编写越来越多的验证代码。我可以看到检查每个缓存数据会非常麻烦。

喜欢听到你的想法和方法,提前谢谢。

0 个答案:

没有答案