Предпочтительные методы наиболее успешной практики

CFPreferences является стандартный API Apple для того, чтобы сохранить и получить предпочтительные ключи и значения, позволяя обработке вызовов сконцентрироваться на собственных типах и значениях пары ключ/значение, а не механизмах записи в файлы и т.д. В то время как это обеспечивает удобный API, это также просто в использовании неправильно. Этот документ дает обзор того, когда является надлежащим использовать то, что API, и как синхронизировать предпочтения через границы процесса.

Когда использовать что API

Следующие общие руководящие принципы применяются к API CFPreferences:

Обратите внимание на то, что, несмотря на то, что они обрабатываются отдельно в документации, высокоуровневый API и низкоуровневый API не являются монопольными. Может быть надлежащим использовать высокоуровневый API в некоторых частях приложения и низкоуровневый API в другом. Например, можно установить предпочтительную пару ключ/значение с CFPreferencesSetValue(key, value, app, user, host) и затем считайте его с CFPreferencesCopyAppValue(key, value, app)— действительно Вы, вероятно, хотите считать его с последней функцией, так как это пересекает путь поиска.

Высокий уровень API

Как можно больше, необходимо использовать CFPreferencesCopyAppValue получать предпочтительные ключи. Эта функция пересекает путь поиска, ища соответствующий ключ и возвращает значение из самого специфичного домена.

Пользователи определенных машин могут также подвергнуться «управлению» через “менеджера по Рабочей группе” или опцию «Capabilities» предпочтительной области Учетных записей в Установках системы. Любой из этих механизмов может вызвать предпочтительные значения на пользователе. Эти значения также взяты CFPreferencesCopyAppValue API — необходимо использовать эту функцию, чтобы гарантировать, что приложение должным образом реагирует на управление этим видом.

Низкий уровень API

Если Ваше приложение должно различить “текущий узел” и “какой-либо узел”, тогда Вы используете низкий уровень API. Если по некоторым причинам необходимо искать пару ключ/значение в определенном домене, необходимо использовать CFPreferencesCopyValue— Вы не должны использовать эту функцию в качестве общего механизма извлечения.

Синхронизация предпочтений через границы процесса

Эмпирическое правило на синхронизации CFPreferences:

  1. Только синхронизируйтесь при необходимости

  2. Если необходимо связаться через границы процесса, используйте уведомления с надлежащей гранулярностью, сохраняя 1) в памяти. Как правило, это означает устанавливать флаг в клиентских процессах, и только если измененный ключ требуется, должен Вы инициировать синхронизирование.

Много процессов в OS X пишут предпочтительную пару ключ/значение для использования в другом процессе. В то время как это было бы удобно для предпочтительных пар ключ/значение для автоматического обновления в других процессах, гарантировав, что автоматическое обновление при всех обстоятельствах будет подвергаться потере производительности и также мешать гарантировать, что связанные предпочтения читаются и последовательно пишутся. Процессы должны всегда иметь выбор того, когда выбрать принимать новую информацию в их пространство. Для предпочтительных значений, CFPreferencesSynchronize и CFPreferencesAppSynchronize вызовы функции что, обеспечивая информационное узкое горло. Вы не должны обычно, однако, вызывать эти функции перед каждым чтением предпочтительного ключа.

Предпочтительное расположение файлов и отладка

Предпочтительные файлы хранятся в предпочтительных каталогах системы или пользователя. На версиях OS X 10.0 к 10,4 они находятся в /Library/Preferences и в /Library/Preferences в корневом каталоге пользователя соответственно. При отладке приложения может иногда быть полезно проверить эти файлы, чтобы решить, что предпочтения были сохранены правильно, однако Вы никогда не должны hardcode эти пути в приложение. Если действительно необходимо получить доступ к каталогу программно, необходимо использовать NSSearchPathForDirectoriesInDomains API, несмотря на то, что не должно обычно быть никакой причины сделать так.

Обратите внимание на то, что предпочтения, которые Вы устанавливаете в регистрационном домене (см. Домены Значений по умолчанию в Руководстве по программированию Предпочтений и Настроек) не сохранены в предпочтительном файле. Другими словами, предпочтительные хранилища файлов только оценивает, которые отличаются от тех в регистрационном домене, таким образом, Вы не должны ожидать видеть “значения по умолчанию по умолчанию” в предпочтительном файле после запуска приложения.

Управляемые предпочтения

OS X v10.2 представил понятие “управляемых предпочтений”. Функция CFPreferencesAppValueIsForced определяет, был ли данный ключ наложен на пользователя. Для управляемых ключей необходимо отключить любой пользовательский интерфейс, позволяющий пользователю изменять значение для ключа.