Является ли plist или NSUserDefaults более эффективными для хранения небольшого объема данных?

#objective-c #ios #plist #nsuserdefaults

#objective-c #iOS #plist #nsuserdefaults

Вопрос:

Я могу пойти любым путем для этого проекта, но мне любопытно, будет ли использование plist для хранения некоторых данных более или менее эффективным, чем просто хранение plist в папке documents. Данные составляют около 50 строк / словарей.

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

Тем не менее, plist кажется немного более трудоемким.

Ответ №1:

NSUserDefaults является списком (вот почему в нем могут храниться только типы plist). Таким образом, в конечном итоге не будет большой разницы в эффективности (что бы вы под этим ни подразумевали). Ваше соображение должно скорее заключаться в том, где уместно хранить эти данные. Не храните его в папке Document, если он не подходит для хранения в iCloud, говорит Apple; он будет скопирован, когда пользователь создаст резервную копию устройства, и будет вычтен из квоты пользователя, поэтому вам нужно экономить на том, что вы там храните.

В одном из моих собственных приложений, где я загружаю кучу данных из RSS-канала и представляю их пользователю, я сохраняю данные по умолчанию для пользователя, потому что они являются частью постоянного состояния приложения при следующем его появлении. Мои данные — это не документ; это состояние приложения. Это мои рассуждения, и я бы предположил, что вы могли бы рассуждать аналогичным образом…

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

1. Я храню даже меньше данных, чем ваш пример с RSS-каналом. Похоже, что NSUserDefaults может быть более простым вызовом. Под «эффективным» я имею в виду скорость возврата данных и память, занимаемую данными, которые в данный момент не нужны.

2. А что, если вы хотите, чтобы данные вашего RSS-канала были синхронизированы с другими устройствами через iCloud? Есть ли какая-либо разница или вы все равно выбрали бы NSUserDefaults?

Ответ №2:

На мой взгляд, plist намного проще в использовании, чем NSUserDefaults. В конце концов, словарь может сохранять себя как plist. Что касается эффективности, они должны быть такими же, как NSUserDefaults, которые хранят все в виде списка, но предоставляют больше услуг, таких как сравнение того, какая пара ключ / значения изменилась по сравнению с предоставленным набором пар ключ / значения по умолчанию.

Ответ №3:

Возможно, вы захотите рассмотреть JSON с использованием JSONKit. Некоторые тесты показывают, что это быстрее, чем двоичный список, если скорость является вашей главной заботой. API очень прост, потому что он создает категорию на NSDictionary и NSArray . Вызов -(NSData *)JSONData любого из этих объектов возвращает NSData объект, готовый к сохранению.