#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
объект, готовый к сохранению.