Ответ
Выбор способа зависит от объёма, структуры и чувствительности данных.
| Способ | Назначение | Ключевые особенности |
|---|---|---|
UserDefaults |
Простые настройки, флаги, небольшие значения. | Простой API, хранит Property List (plist). Не для конфиденциальных или больших данных. |
| Keychain Services | Пароли, токены, криптографические ключи. | Безопасное хранилище на уровне системы. Используйте через Security.framework или обёртки (например, KeychainAccess). |
| Core Data | Сложные объектные графы с отношениями, локальная БД. | Объектно-графовый и persistence-фреймворк от Apple. Использует SQLite, XML, бинарный формат. |
| Realm | Альтернатива Core Data для сложных данных. | Собственный движок БД, часто быстрее Core Data, простой Swift/Obj-C API. |
| SQLite (прямой) | Полный контроль над SQL-запросами и схемой. | Лёгкая встраиваемая БД. Используйте библиотеки-обёртки: FMDB (Obj-C), GRDB.swift (Swift). |
| Файловая система | Изображения, документы, кэш, большие бинарные данные. | Используйте FileManager для работы с директориями (Documents, Library/Caches, tmp). |
Архивация (Codable/NSCoding) |
Сохранение кастомных объектов в файл или UserDefaults. |
Codable — современный Swift-способ сериализации в JSON/Property List. |
Практические примеры:
UserDefaults:
UserDefaults.standard.set(true, forKey: "isDarkModeEnabled")
let value = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")
Сохранение в файл через Codable:
struct Settings: Codable { var theme: String }
let settings = Settings(theme: "dark")
let url = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)[0]
.appendingPathComponent("settings.json")
let data = try JSONEncoder().encode(settings)
try data.write(to: url) Ответ 18+ 🔞
Ну, слушай, смотри, тут такая хуйня: выбор способа — это как выбрать, куда спрятать свою бутылку. В носки, в бачок унитаза или в сейф, блядь. Всё зависит от того, что прячешь, насколько это ценно и как часто будешь доставать.
Вот тебе таблица, чтобы не пиздеть попусту:
| Способ | Назначение | Ключевые особенности |
|---|---|---|
UserDefaults |
Простые настройки, флаги, небольшие значения. | Простой API, хранит Property List (plist). Не для конфиденциальных или больших данных. |
| Keychain Services | Пароли, токены, криптографические ключи. | Безопасное хранилище на уровне системы. Используйте через Security.framework или обёртки (например, KeychainAccess). |
| Core Data | Сложные объектные графы с отношениями, локальная БД. | Объектно-графовый и persistence-фреймворк от Apple. Использует SQLite, XML, бинарный формат. |
| Realm | Альтернатива Core Data для сложных данных. | Собственный движок БД, часто быстрее Core Data, простой Swift/Obj-C API. |
| SQLite (прямой) | Полный контроль над SQL-запросами и схемой. | Лёгкая встраиваемая БД. Используйте библиотеки-обёртки: FMDB (Obj-C), GRDB.swift (Swift). |
| Файловая система | Изображения, документы, кэш, большие бинарные данные. | Используйте FileManager для работы с директориями (Documents, Library/Caches, tmp). |
Архивация (Codable/NSCoding) |
Сохранение кастомных объектов в файл или UserDefaults. |
Codable — современный Swift-способ сериализации в JSON/Property List. |
А теперь, блядь, практика, чтобы не быть теоретическим пидорасом.
UserDefaults:
UserDefaults.standard.set(true, forKey: "isDarkModeEnabled")
let value = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")
Вот, смотри, это как записку на холодильник магнитиком прилепить. Быстро, просто, но любой, кто заглянет в твой plist-файл, её прочитает. Пароли туда не суй, ёпта!
Сохранение в файл через Codable:
struct Settings: Codable { var theme: String }
let settings = Settings(theme: "dark")
let url = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)[0]
.appendingPathComponent("settings.json")
let data = try JSONEncoder().encode(settings)
try data.write(to: url)
А это уже посерьёзнее. Упаковал свою структуру в JSON и запихнул в Documents. Как будто засунул пачку денег в банковскую ячейку, а не в носки. Уже лучше, блядь. Главное, путь (url) не потеряй, а то потом будешь как Герасим, «Му-му» говорить, а файла-то и нет.