2013-08-21 3 views
0

Когда должны быть записаны значения NSUserDefault? У меня есть несколько значений по умолчанию, которые могут меняться в течение всего срока действия программы. Должен ли я записывать значения по умолчанию сразу после их изменения или я должен дождаться окончания, когда приложение будет завершено, записать значения по умолчанию обратно?Когда писать в NSUserDefaults?

+2

Это зависит от того, какие (и насколько) данные находятся в этих значениях по умолчанию. Много ли данных (обычно этого не будет)? Какое последствие (и вероятность), что приложение выйдет из строя, прежде чем вы получите возможность написать NSUserDefaults? Кроме того, вы можете уточнить, что вы подразумеваете под «write». Вы спрашиваете о вызове 'setObject: forKey:' или фактически сохраняете данные с вызовом 'synchronize'? – Nate

+0

Количество данных: 2-3 относительно небольшой массив (менее 10 объектов), 5 или около того ints/booleans. Я не ожидаю, что приложение выйдет из строя (если только это не ошибка программирования). Я прошу о вызове setObject: forKey: – user1802143

+0

user1802143 Вы никогда не ожидаете * производственной версии приложения для сбоя. Иногда это происходит в любом случае. @Nate поднимает некоторые хорошие моменты, особенно re: severity. Если сохранение значения не приводит к изменению баланса банковского счета пользователя, это проблема. Если это означает, что они должны сбросить время на часах, возможно, не так много. – WendiKidd

ответ

1

Задайте новые значения NSUserDefaults непосредственно после изменения значения. NSUserDefaults сохраняет свои данные в памяти. Таким образом, письмо, скорее всего, будет достаточно быстрым.

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

+0

Но будьте осторожны, чтобы вы * дозвонили синхронизацию до закрытия приложения, иначе ни одно из ваших изменений не будет сохранено. – WendiKidd

+0

Давайте посмотрим на документацию на Яблоки. [ 'Synchronized'] (https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUserDefaults/synchronize) : «Поскольку этот метод автоматически вызывается с периодическими интервалами, используйте этот метод только в том случае, если вы не можете дождаться автоматической синхронизации (например, если ваше приложение собирается выйти) или если вы хотите обновить пользовательские значения по умолчанию на том, что находится на диске даже если вы не внесли никаких изменений ». –

+0

", если вы не можете дождаться автоматической синхронизации (например, если ваше приложение собирается выйти)« Это то, что я имел в виду. Если я что-то не понимаю, так как мы не знаем, когда появятся эти «периодические интервалы», вы должны обязательно позвонить ему до выхода приложения, не так ли? (Если я ошибаюсь, пожалуйста, поправьте меня, это значит, что я делал это неправильно.) – WendiKidd

Смежные вопросы