我有一个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
我的问题是使缓存数据无效的策略或最佳做法。我想到了一些方法,但它们都有缺陷。
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
}
是不够的,您必须编写越来越多的验证代码。我可以看到检查每个缓存数据会非常麻烦。
喜欢听到你的想法和方法,提前谢谢。