#ios #storage #temporary-objects
#iOS #Хранение #временные объекты
Вопрос:
Итак, у меня есть гибридное приложение для iOS для электронной коммерции, над которым я работаю, и мне нужно временно хранить несколько значений строк / массивов на время процесса оформления заказа. Если пользователь покидает процесс оформления заказа, я хочу, чтобы эти значения были либо удалены, либо сброшены. В противном случае, в определенные периоды времени во время процесса оформления заказа я хочу иметь возможность извлекать эти значения и использовать их.
Каков наилучший способ добиться этого? Основные данные кажутся немного более постоянными, чем я ищу, но это может быть правильный путь. Я всегда могу хранить там данные и удалять их, когда пользователь покидает процесс оформления заказа, но мне интересно, есть ли лучший способ сделать это, в принципе.
Примечание о гибридной части:
- Когда пользователь нажимает «оформить заказ», мы запускаем WebView, и процесс оформления заказа продолжается там.
- У меня есть класс извлечения данных (созданный через JS bridge), который извлекает некоторые данные, но классу не хватает памяти, как только он завершает извлечение данных
- Мне нужно получить доступ к указанным данным из javascript в нескольких отдельных частях после того, как классу извлечения данных не хватает памяти
Итак, принимая это во внимание, где мне лучше всего хранить данные, которые извлекаются классом извлечения данных? Пример кода, конечно, всегда приветствуется :). Спасибо!
Ответ №1:
Если данные, которые вы извлекаете из WebView, представляют собой пары ключ-значение, вам не нужно настраивать Core data для этого. Вы можете просто использовать NSUserDefaults для хранения данных. Вы можете сохранять настройки и свойства, связанные с данными приложения или пользователя, используя NSUserDefaults. Значения будут сохранены для всей области вашего приложения, но вы можете сбросить значения, как только закончите чтение этих значений в процессе оформления заказа.
Вот как вы сохраняете данные с помощью NSUserDefaults —
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:firstName forKey:@"firstName"];
[defaults synchronize];
Для извлечения данных можно использовать следующий код —
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *firstName = [defaults objectForKey:@"firstName"];
Комментарии:
1. Понял. Поэтому мне обязательно нужно сбросить эти значения вручную, правильно? Другая идея, которая у меня была, заключалась в том, чтобы сохранить эту информацию в статических переменных в классе извлечения данных, чтобы при повторном извлечении они сохранялись в памяти, а не для их повторного извлечения.
2. Вы можете сбросить значения ключей в NSUserDefaults только тогда, когда вам нужно снова использовать ту же переменную. Но сохранение значений в статических переменных также выполнит эту работу. Значения останутся в памяти.
3. Для меня достаточно хорошо. Спасибо за информацию.
4. Есть ли какой-либо другой способ сохранения объекта в памяти, но не сохранения в постоянное хранилище (как здесь), особенно для больших объектов? AFAIK этот метод преобразуется в base64, что достаточно хорошо, но не для больших объектов.