NSUserDefaults синхронный метод - PullRequest
48 голосов
/ 10 марта 2012
 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"xxxxxxxx" forKey:@"name"];

[defaults synchronize];

Мне нужно знать, почему я должен использовать последнюю строку кода выше [defaults synchronize]?Какова цель использования этого?Это обязательно?

Ответы [ 3 ]

98 голосов
/ 10 марта 2012

Цель [default synchronize]; состоит в том, чтобы пользовательские значения по умолчанию записывались на диск немедленно . Вам не нужно называть это явно, iOS уже делает это в соответствующие моменты. Таким образом, вы можете удалить эту строку. На самом деле, это проблема производительности, если вы звоните synchronize каждый раз, когда устанавливаете значение по умолчанию.

До iOS 7 пользовательские настройки по умолчанию всегда синхронизировались при переходе приложения в фоновый режим. Начиная с iOS 7, это больше не так, поэтому вы можете вызвать synchronize в делегате вашего приложения applicationDidEnterBackground: или зарегистрироваться для уведомления UIApplicationDidEnterBackgroundNotification, чтобы сделать это.

С документация для -[NSUserDefaults synchronize]:

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

16 голосов
/ 05 декабря 2017

Вам больше не нужно писать эту строку.

Ссылка на метод из обновленной документации

Ожидание любых ожидающих асинхронных обновлений базы данных по умолчанию. и возвращается; этот метод не нужен и не должен использоваться.

Комментарии к методу, объясняющие, что делать.

     /*!
     -synchronize is deprecated and will be marked with the NS_DEPRECATED macro in a future release.

     -synchronize blocks the calling thread until all in-progress set operations have completed. This is no longer necessary. Replacements for previous uses of -synchronize depend on what the intent of calling synchronize was. If you synchronized...
     - ...before reading in order to fetch updated values: remove the synchronize call
     - ...after writing in order to notify another program to read: the other program can use KVO to observe the default without needing to notify
     - ...before exiting in a non-app (command line tool, agent, or daemon) process: call CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication)
     - ...for any other reason: remove the synchronize call
      */
     open func synchronize() -> Bool
5 голосов
/ 10 марта 2012

Да, с этой строкой вы говорите своей системе загрузить NSUserDefaults с вашими новыми значениями по умолчанию.

Вы можете найти всю информацию здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...