Вимірювання та приладобудування
Використання Core Data для ефективного управління локальними даними в Ios
Table of Contents
Основні дані є основною основою для управління графом об'єкта в додатках iOS. Скоріше, ніж для розробників, щоб писати сиру SQL або керувати послідовністю файлів, Core Data забезпечує високорівневий об'єктно-орієнтований інтерфейс, який керує складністю зберігання, відстеження змін та моделювання даних. Кожен розробник iOS працює з локальними даними повинен розуміти можливості Core Data та кращі практики побудови чуйних, даних-багатих додатків без підвищення продуктивності.
Розуміння архітектури даних Core
Основні дані не просто база даних. Це структура управління об'єктами, яка може зберігати дані на диску, але вона також керує відносинами з об'єктами, управлінням та перевіркум. Архітектура покладається навколо чотирьох ключових компонентів, які працюють разом з тим, щоб сформувати, що зазвичай називається Core Dataстек.
Стейк Core Data
Кожна реалізація даних Core вимагає певного набору об'єктів, пов'язаних з певним замовленням. Стек складається з:
- Управліний контекст об'єкта (NSManagedObjectContext):] Скретчпад, де розробники працюють з керованими об'єктами. Всі зміни відбуваються в контексті перед збереженням стійких до стійких магазинів.
- Координатор магазину (NSPersistentStoreCoordinator): Акти як міст між контекстом і фактичним стійким магазином (s). Він медіатекс доступу і забезпечує цілісність даних.
- Управліна Модель об'єкта (NSManagedObjectModel):] Опишіть суб'єкти, атрибути та взаємозв'язки в даних schema. Зазвичай він визначається візуально в .xcdatamodeld файл.
- Persistent Store:. Фактичний механізм зберігання, який може бути SQLite, бінарний або безсмертний. SQLite є за замовчуванням для додатків виробництва.
Сучасна розробка iOS часто використовує класу, який автоматично створює та налаштовує весь стек. Це видаляє котелборди та зменшує шанс на неправильне налаштування.
Налаштування основних даних у вашому проекті
Додавання Core Data до проекту iOS вимагає декількох висновних кроків, кожен з яких будує основу для управління даними. Процес починається з створення файлу моделі даних, потім відхилення ваших суб’єктів, і, нарешті, інтегруючи стопку з життєвим циклом додатка.
Створення моделі даних
Почати додавати новий файл до проекту Xcode за допомогою Data Model шаблон (вимірювання .xcdatamodeld). У цьому візуальному редакторі ви визначаєте особи (визначте таблиці), їх атрибути (колони), та зв’язки з іншими суб’єктами. Ви також можете вказати типи даних, значення за замовчуванням, правила перевірки та параметри індексації для оптимізації продуктивності запиту.
Визначення сутностей та відносин
Кожна особа представляє тип управління вашим додатком, таких як Користувач, Завдання або Продукт. Атрибути визначають характеристики цієї особи (ім'я, ціна, дата і т.д.). Зв'язки з'єднувачами, що дозволяють Core Data відстежувати графіки об'єктів і автоматично пропагувати вилучень або оновлення. Наприклад, суб'єкт "Person" може мати одно-на-людні відносини для суб'єктів "Телефон", які Core Data може fetch в будь-якому напрямку.
При розробці відносин звертайте увагу на . Визначається правило . Варіанти включають Нулліфа, Каскад і Денис. Вибір неправильного правила може призвести до несподіваних втрат даних або записів з сирим. Каскад часто підходить для батьківських відносин, в той час як Нулліфа добре працює для додаткових об'єднань.
Генерація NSManagedObject субкласи
Після завершення роботи вашої моделі суб'єкта, Xcode може автоматично генерувати Swift-класи для кожної особи. Ці підкласи успадкують від і включають в себе властивості і відносини, які визначаються. Починаючи з Xcode 8, рекомендується підхід вибрати "Codegen" як Class Definition] (default), що зберігає отримані файли в папці даних отриманих даних. Крім того, ви можете вибрати "Manual/None" і створити власні підкласи, корисні при додаванні користувацьких методів або комп'ютерних властивостей.
Виконання операцій CRUD
З укладкою в місці можна вставляти, фіксувати, оновити та видаляти керовані об'єкти за допомогою . Усі операції повинні виконуватися в рамках контексту, а зміни зберігаються тільки після успішного виклику.
Створення та збереження об'єктів
Щоб вставити новий об'єкт, скористайтеся , а потім встановити його властивості. Після всіх змін, виклик ]. Завжди обертайте дзвінки в , блокуйте, щоб впоратися з помилками граціозно, особливо під час користувацьких дій.
Дані про оплату з приписами та декриптованими декриптами
є основним механізмом для запиту об'єктів. Ви можете протипоказати результати за допомогою (наприклад, ) і результати замовлення з . Основні дані також підтримує сполукні індекси, підвіконня, і захоплюючі стосунки, які мають відношення. Для великих даних завжди обмежують розмір fetch з і розглянемо використання для зменшення використання пам'яті.
Оновлення та видалення
Оновлення об'єкта є простою, як модифікація його властивостей в контексті; Core Data відстежує зміни автоматично. Для видалення, виклик . Пам'ятайте, щоб зберегти контекст після завершення. Для партійних відключень використовуйте , який працює безпосередньо в стійких магазинах без завантаження об'єктів в пам'ять, різко покращуючи продуктивність.
Кращі практики для виробництва-читати Core Data
Навіть добре налаштований Стек даних Core може стати пляшечкою або джерелом помилок, якщо не керуються ретельно. Після встановлених шаблонів, ваш додаток залишається відповідальним, стабільним і масштабованим.
Безпека та безпека
Основні контексти даних не є нижчими за замовчуванням. Ніколи не поділяйте контекст між нитками. Замість, скористайтеся методом для створення приватного контексту чергу для фонових операцій. При переході об'єктів на головній нитки використовуйте або для забезпечення виконання ниток. Для SwiftUI, об'єкт обгортання автоматично відстежує зміни на головному контексті, але важкі фетчі все ще повинні бути завантажені на фонові контексти.
Редакція та міграції
Як ваш додаток розвивається, ваша модель даних змінить—з'єднання атрибутів, ренамуючих осіб або змінюючи відносини. Основні дані підтримують два типи міграції: легкий міграції і custom міграції. Легка міграційна ручка проста зміна (приписи, зміна опціону, перенамішування властивостей з ідентифікатором) автоматично, якщо ви передаєте параметри при додаванні магазину. Для складних трансформацій, створення моделі картографування і реалізації підкласи. Завжди ретельно перевірте міграції, оскільки не вдалося перенести помилки користувача.
Оптимізація продуктивності
Ефективна продуктивність даних Core починається з дизайну моделі даних. Використовуйте indexes] на атрибути, які з'являються часто у предикацій. Уникайте вилучення всіх графів об'єкта, коли потрібен тільки підмножин; замість того, щоб використовувати і . Підтримка основних даних , що за замовчуванням , де властивості об'єкта не завантажуються до доступу. Ви можете попередньо зафіксувати стосунки з , щоб уникнути "fault-firing", що керовані під час перегляду таблиці [:24].
Порада
Кожен fetch, зберегти і видалити операцію може потенційно не вийти. Завжди ввімкніть ці дзвінки в блоки і вкажіть значущі повідомлення про помилки в користувача. Збережіть помилки часто виникають через перевірки помилок або обмеження порушень, тому перевірте помилки ретельно. Об'єкти помилки Core Data містять кілька базових помилок, які можна ітерувати через надання конкретного зворотного зв'язку. Для пакетних операцій ручка відповідно - вмітайте, що партія видаляє не автоматично каскад, тому вам може знадобитися вручну обробляти пов'язані об'єкти.
Інтеграція даних Core з SwiftUI
SwiftUI надає підтримку першого класу для Core Data через обгортки та значення для навколишнього середовища. автоматично дотримується основного контексту та освіжає вигляд при зміні даних. Ви можете налаштувати дескриптори та предикатор безпосередньо в декларації про майно. Для більшого контролю гранули, вводити керований контекст об'єкта в навколишнє середовище за допомогою . При роботі з `@ObservedObject` або `@StateObject` для моделі перегляду, забезпечити, що модель перегляду має посилання на фоновий контекст, якщо виконувати важкі операції.
SwiftUI також спрощує управління відходами: встановити на контексті, і SwiftUI автоматично інтегрувати з безбодно / червоно-червоними жестами системи.
Основні дані проти. Інші параметри наполегливості
Хоча Core Data є найбільш зрілим і інтегрованим рішенням для локального зберігання iOS, це не завжди найкращий вибір. Порівняйте його з альтернативами:
- UserDefaults: Підходить для невеликих сум уподобань користувачів, але не для складних або великих даних.
- Realm: Пропонує простий API і автоматичні оновлення реактивних, але додає залежність і не інтегрується в глибоко з SwiftUI.
- Raw SQLite: дає максимальний контроль і продуктивність для дуже великих даних або складних запитів, але вимагає управління з'єднаннями, міграції та різьблення вручну.
- ХмарКіт + Основні дані: Для додатків, які потребують синхронізації iCloud, Apple міст Core Data and CloudKit, автоматично синхронізація локальних змін до хмари.
Для більшості стандартних додатків iOS, які вимагають структурованих даних, відносин та автономної здатності, Core Data залишається рекомендованим вибором завдяки своїй безшовної інтеграції з платформою та тривалій підтримці Apple.
Висновок
Core Data надає систему керування об'єктом, яка анотаціями від складних можливостей стійких до зберігання, відстеження змін та управління відносинами. З розумінням його архітектури — від керованого контексту об'єкта до стійких контейнерів — та слідувати за перевіреними практиками для конвактиви, продуктивності та обробки помилок, розробники можуть будувати додатки, які є надійними та відповідальними. Незалежно від того, чи ви будуєте простий у використанні список або додаток для обробки даних, майстерні Core Data є цінною навичкою, яка розблокує ефективне управління локальними даними на iOS.
Для подальшого вивчення, консультуйтеся з Apple Core Data документацією, ]Кореневий посібник з програмування даних , та ресурси спільноти, такі як Ray Wenderlich's Core Data by Tutorials] для практичних вправ та глибоких інсайтів у передові теми, як міграції та конвагація.