У меня есть социальное приложение, где пользователю могут нравиться фотографии ... Поэтому, чтобы не дожидаться получения данных с сервера, я хочу сохранить их на устройстве, массив строк, содержащий объектные объекты фотографий. Вопрос заключается в том, что, учитывая, что пользователю может нравиться тысячи фотографий, хорошо ли использовать UserDefaults для достижения этого?Swift - Сохранить огромный массив строк с UserDefaults
ответ
EDIT Как отметил Эрик Ая в комментариях, NSUserDefaults не загружаются автоматически в памяти, когда приложение запусках.
NSUserDefaults загружаются в память, когда приложение запускает
Если у вас есть особенно большое количество данных, хранящихся в NSUserDefaults то время, которое требуется
приложение для запуска
для загрузки NSUserDefaults будет влиять на количество IO требуется для извлечения ваших данных. Предполагаемый прецедент для NSUserDefaults заключается в хранении небольших наборов данных, таких как пользовательские настройки по умолчанию.
Plist может быть лучшим решением (NSUserDefaults - это просто Plist,
разница заключается в том, что он загружается автоматически для вас, когда приложение запускает
). У вас все еще будут проблемы с временем загрузки, когда вы решите захватить Plist, когда будете загружать файл (Plist) в память. Вы сможете справиться с этим с чем-то вроде индикатора выполнения или индикатора активности, который дает пользователю более приятный опыт.
, чем ждать дольше, чем обычно, для открытия приложения
. CoreData - это еще один вариант (обычно предназначенный для более сложных структур данных, чем строк, с другой стороны, он дает вам возможность масштабировать ваши потребности в хранении очень легко, если сложность ваших данных увеличивается), есть довольно крутая кривая обучения, но это замечательная особенность и хорошо документирована Apple: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/
Я бы также рекомендовал хранить данные на сервере, где вы могли бы открыть его через API и кэшировать ответ, используя Plist/CoreData/Что бы вы ни хотели. Таким образом, если ваши пользователи меняют устройства, они все равно будут иметь доступ к тем же данным, которые хранятся удаленно.
Удачи вам!
'NSUserDefaults загружаются в память, когда ваше приложение запускает Nope. NSUserDefaults на самом деле является plist, хранящимся в контейнере приложения, и содержимое загружается только в том случае, если вы делаете это с помощью кода. Кроме этого, ваш ответ правильный. – Moritz
@ EricAya, вы правы, по какой-то причине у меня всегда застрял в голове, что он загружается при запуске приложения. Я исправлю свой ответ, ура! – mike
Голосование, чтобы закрыть, потому что это не конкретный вопрос, но короткий ответ: нет. Пользовательские значения по умолчанию являются средними для сохранения предпочтений, а не данных. Используйте JSON-файл в каталоге «Документы», используйте «Основные данные», используйте простой sqlite ... но не «Пользовательские настройки по умолчанию». – Cyrille
Не знаете, почему это не правильный вопрос, но спасибо за ответ! –
Я согласен с Кириллом, если вам нужно какое-либо подтверждение. Хранение данных на телефоне может быть несколько сложным. Я потратил некоторое время, работая через несколько учебников, прежде чем копаться в CoreData, но это стоит того, чтобы учиться! Я не слишком много перепутал с другими методами. – Sethmr