gpt4 book ai didi

iphone - 多次读取 plist 与创建对象并仅读取一次 plist 以访问 plist 中的数据

转载 作者:可可西里 更新时间:2023-11-01 05:24:46 25 4
gpt4 key购买 nike

我想制作一个从 plist 中检索数据的数据管理器类,我想知道我是否应该制作一个包含所有类方法的类,每次调用该方法并返回请求的值时读取 plist,或者创建一个类使用 plist 数据初始化数组(实例变量)的初始化器,所有方法都是从数组获取数据的实例方法。

我想知道哪个更昂贵:多次读取 plist(例如 50 次)或实例化一个对象,或者只是哪个更好。

提前感谢您的帮助。

最佳答案

这是编程中的经典权衡之一 - 速度与内存使用。读取一次并将其存储在更快的介质(在本例中为内存)中的技术称为缓存。它很受欢迎,而且有充分的理由。大容量存储设备仍然比 RAM 慢很多,网络访问比本地大容量存储慢很多。

如果你假设数据会经常被问到经理,如果你假设 plist 不会改变(或者你可以检测到变化),那么在第一次访问 getter 时读取 plist,将它存储在一个iVar,只要 plist 没有改变,就只回答 iVar。这会占用更多内存,但后续访问速度会快很多。

注意:这种方法对于非常非常大的文件是有害的。如果您担心内存使用,请在您的 viewController 中实现 - (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;
}

关于iphone - 多次读取 plist 与创建对象并仅读取一次 plist 以访问 plist 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6620808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com