Как хранить относительно статичную, но настраиваемую информацию

#iphone #cocoa-touch #ios #application-settings #property-list

#iPhone #cocoa-touch #iOS #приложение-настройки #список свойств

Вопрос:

У меня есть таблица (словарь словарей) для хранения сопоставления целых чисел со строками. У меня есть типы и подтипы. например, тип 1 => фрукты и подтип 1 => яблоко.

Отображение должно настраиваться в моем интерфейсе настроек, но для перезагрузки приложения оно довольно статичное. Поэтому я не хочу читать из списка свойств каждый раз, когда проверяю сопоставление. Я хотел бы читать только один раз при запуске программы и записывать только тогда, когда пользователь изменяет настройки.

Где я должен хранить эту таблицу во время выполнения? Я имею в виду два подхода: (1) поместить всю таблицу в качестве переменной в делегате приложения, в этом случае мне нужно использовать objectForKey дважды каждый раз, когда мне нужно получить строку. (2) заключается в создании класса со статической переменной (пока не уверен, как это сделать) и использовании метода class для получения сопоставления, например (NSString) stringForType: subType:

Не могли бы вы, пожалуйста, оценить эти два подхода или предложить лучшие решения? Большое спасибо!

Комментарии:

1. Есть ли причина, по которой вы не хотите каждый раз читать plist? Если словарь достаточно велик, чтобы каждый раз считывать его с диска слишком медленно, то, вероятно, он слишком велик для хранения в памяти.

2. Не было бы медленным, если бы я каждый раз читал из plist? учитывая, помещу ли я ее в viewDidLoad.

3. Чтение и запись списков происходит на удивление быстро. Почему бы не попробовать и не профилировать ее? Вы всегда можете сделать это в фоновом потоке и показывать индикатор активности во время его загрузки.

Ответ №1:

на самом деле не имеет значения, куда вы ее помещаете, если вы сохраняете ровно одну ее копию, важно, чтобы вы проверили valueForKeyPath:. Если вы сохраняете в plist и регулярно сохраняете в plist, у вас есть большое преимущество в виде сохраняемости. Вы можете получить это автоматически с помощью [NSUserDefaults standardUserDefaults]; объекта.