我想创建一个从plist中检索数据的数据管理器类,我想知道是否应该使用所有类方法创建一个类,每次调用方法并返回请求的值时读取plist,或者创建一个类初始化器使用plist数据初始化数组(实例变量),所有方法都是从数组中获取数据的实例方法。
我想知道哪个更贵:阅读plist多次(如50次)或实例化一个对象,或者只是哪个更好。
提前感谢您的帮助。
答案 0 :(得分:7)
这是编程中经典的权衡之一 - 速度与内存使用。读取一次并将其存储在更快的介质(在本例中,在内存中)的技术称为缓存。它非常受欢迎,而且有充分的理由。大容量存储设备仍然比RAM慢,网络访问速度比本地大容量存储器慢。
如果您假设经常会询问经理的数据,并且您认为plist不会改变(或者您可以检测到更改),那么在第一次访问getter时读取plist,将其存储在iVar,只要plist没有改变,只回答iVar。这会占用更多内存,但后续访问速度要快得多。
注意:这种方法对非常非常大的文件有害。如果您担心内存使用情况,请在viewControllers中实现- (void)didReceiveMemoryWarning
方法,并在内存不足时刷新缓存(删除它)。
getter方法可能如下所示:
- (NSArray *)data
{
if (!cacheArray) {
//what we do now is called "lazy initialization": we initialize our array only when we first need the data.
//This is elegant, because it ensures the data will always be there when you ask for it,
//but we don't need to initialize for data that might never be needed, and we automatically re-fill the array in case it has been deleted (for instance because of low memory)
cacheArray = ... //read array from plist here; be sure to retain or copy it
}
return cacheArray;
}