Обязательно ли вызывать метод синхронизации NSUserDefaults?

Пожалуйста, кто-нибудь, помогите мне: является ли обязательным вызов NSUserDefaults synchronize()? Если я не позвоню, что произойдет? Мое приложение работает нормально без него.

Ответ 1

Нет

Начиная с iOS12, это больше не является обязательным. Apple говорит:

Этот метод не нужен и не должен использоваться.

Вы можете найти больше информации о выпуске iOS12:

UserDefaults

NSUserDefaults имеет несколько исправлений ошибок и улучшений:

Удалены требования к синхронизации. Больше не нужно использовать синхронизацию, CFPreferencesAppSynchronize или CFPreferencesSynchronize. Эти методы будут устаревшими в будущей версии ОС.

Теперь, когда вам не нужно вызывать эти методы синхронизации, характеристики производительности NSUserDefaults и Preferences Utilities немного отличаются: время, затрачиваемое на постановку в очередь операций записи, теперь оплачивается потоком записи, а не следующим потоком для вызова синхронизации или сделать операцию чтения.

Ответ 2

В docs:

Поскольку этот метод автоматически вызывается с периодическими интервалами, используйте этот метод, только если вы не можете дождаться автоматической синхронизации (например, если ваше приложение собирается выйти) или если вы хотите обновить настройки пользователя по умолчанию диска, даже если вы не внесли никаких изменений.

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

Ответ 3

Обычно он работает отлично, и вам нужно использовать его только в особых случаях, например, когда приложение закроется непосредственно после записи в NSUserDefaults. Таким образом, вы можете просто добавить метод synchronize к соответствующему методу AppDelegate.

Ответ 4

Как говорили другие, обычно вам вообще не нужно синхронизировать связь.

Обычно система вызывает это для вас, поэтому ваши изменения по умолчанию записываются.

Однако при работе с Xcode довольно часто заканчивается ваше приложение, нажимая период команды или нажав кнопку остановки. В этом случае приложение прекращает действие приложения без предупреждения, и ваши изменения по умолчанию для пользователя, скорее всего, не будут выписаны и будут потеряны.

Это может быть хорошо или плохо, в зависимости от того, что вы хотите. Это, конечно, запутывает.

Вы можете "исправить" его, вызвав синхронизацию при каждом изменении или на каком-то временном интервале. Однако это замедляет ваше приложение и увеличивает его требования к энергопотреблению (как по очень небольшим суммам.) Если вы находитесь в цикле, записываете изменения в 10 000 записей на сервере или Core Data, и вы меняете настройки пользователя по умолчанию после каждого прохода, а затем вызываете синхронизацию после каждый может иметь измеримый эффект на скорость приложения и время автономной работы. В большинстве случаев вы вряд ли заметите разницу.