Это один из классических компромиссов в программировании - скорость по сравнению с использованием памяти.Техника чтения чего-то один раз и сохранения его на более быстром носителе (в этом примере в памяти) называется кешированием.Это очень популярно и не зря.Запоминающие устройства все еще на несколько медленнее, чем ОЗУ, а доступ к сети на несколько медленнее, чем на локальное запоминающее устройство.
Если вы предполагаете, что данные будут часто запрашиваться у менеджера, и если вы предполагаете, что список не изменится(или вы можете обнаружить изменения), затем прочитайте список при первом доступе к геттеру, сохраните его в iVar и отвечайте только на iVar, пока список не изменился.Это использует немного больше памяти, но намного быстрее для последующих обращений.
ПРИМЕЧАНИЕ. Этот подход был бы вреден для очень, очень больших файлов.Если вас беспокоит использование памяти, реализуйте метод - (void)didReceiveMemoryWarning
в ваших viewControllers и очищайте кэш (удаляйте его), когда у вас мало памяти.
Метод получения может выглядеть следующим образом:
- (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;
}