Какие способы хранения временных данных доступны в iOS?

Ответ

Выбор зависит от объема, типа данных и времени жизни.

1. UserDefaults Для небольших простых значений (настройки, флаги).

UserDefaults.standard.set("tempValue", forKey: "myTempKey")

2. NSCache Для объектов, которые можно удалить при нехватке памяти (автоматически очищается системой).

let cache = NSCache<NSString, UIImage>()
cache.setObject(image, forKey: "tempImage")

3. Временная директория файловой системы Для больших данных (файлы, изображения). Система может очистить эту директорию.

let tempURL = FileManager.default.temporaryDirectory
    .appendingPathComponent("tempFile.txt")

4. Оперативная память (RAM) Через свойства класса, синглтоны или статические переменные. Данные живут только во время работы приложения.

Важно:

  • Для конфиденциальных временных данных используйте Keychain.
  • Всегда явно очищайте временные данные, когда они больше не нужны.

Ответ 18+ 🔞

Да ты посмотри, какие варианты нарисовались для временного хранения! Прямо как в столовке — выбор блюд, только вместо котлет и компота у нас данные. Ну, поехали разбирать этот салат, блядь.

1. UserDefaults — для мелочёвки Это твой ящик для всякой хуйни в прихожей. Закинул ключи, мелочь из карманов, забыл. Идеально для настроек, флажков и прочей ерунды, которая должна пережить перезапуск приложения, но по сути — мусор.

UserDefaults.standard.set("tempValue", forKey: "myTempKey")

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

2. NSCache — умный мусорный бак Вот это уже интереснее, ёпта! Кэш, который сам понимает, когда память кончается, и начинает выкидывать старые данные, чтобы новые влезли. Как твоя бабушка перед приходом гостей — всё, что не влезает в шкаф, летит на балкон или в помойку.

let cache = NSCache<NSString, UIImage>()
cache.setObject(image, forKey: "tempImage")

Поставил картинку, поработал с ней, система сама её прибьёт, когда захочет. Удобно, но надеяться на неё — всё равно что доверять кошку стеречь сметану.

3. Временная папка (temporaryDirectory) — сарай для барахла Нужно что-то пожирнее и надёжнее, чем в оперативке, но чтобы система могла это подчистить, когда место нужно? Вот тебе сарай, блядь, на краю файловой системы.

let tempURL = FileManager.default.temporaryDirectory
    .appendingPathComponent("tempFile.txt")

Скинул туда файлик, поработал. Система его может сама стереть, но обычно живёт, пока приложение живо. Главное — сам не забудь за собой убрать, а то засрешь всё, как последний свин.

4. Оперативка (RAM) — прямо в руки и держи Самый быстрый способ, ядрёна вошь! Засунул данные в свойство класса, в синглтон или статическую переменную — и они живут ровно столько, сколько живёт твой объект или пока приложение не схлопнется. Выключил приложение — всё, пиздец, данные испарились, как твоя зарплата в пятницу вечером. Никакой персистентности, только хардкор.

Важный пиздец на посошок:

  • Если твои «временные» данные — это пароли или номера карт, то ты, блядь, совсем охренел? Для этого есть Keychain, кретин! Туда и пиши.
  • И главное правило, которое все забывают: чисти за собой, сука! Не надейся на систему. Закончил работать с временным файлом — удали его. Кэш больше не нужен — очисти. А то потом удивляешься, откуда гигабайты мусора на телефоне у пользователя берутся. Сам же и получишь по ебалу от ревьюеров в App Store.