encyklopedia.space

Core Data

Core Data – framework opracowany przez firmę Apple udostępniany w systemach operacyjnych iOS, iPadOS, macOS, watchOS i tvOS. Służy do zarządzania modelami obiektowymi oraz ich trwałej persystencji w aplikacjach. Choć nie jest jedynie bazą danych, umożliwia ona przechowywanie, pobieranie i przetwarzanie danych w sposób zbliżony do systemów ORM (Object‑Relational Mapping).

Historia

Framework został po raz pierwszy wprowadzony w 2008 roku jako część Mac OS X Tiger i od tego czasu był stopniowo rozbudowywany. W wersji iOS 3 pojawił się wsparcie dla urządzeń mobilnych, a w kolejnych aktualizacjach wprowadzono m.in. integrację z językiem Swift oraz obsługę iCloud.

Podstawowe pojęcia

  • Model danych – opisany w Core Data Model za pomocą diagramu encji i ich atrybutów.
  • Managed Object Context (MOC) – obiekt NSManagedObjectContext pośredniczący w operacjach na danych, zapewniający izolację transakcji.
  • Managed Object – instancja klasy NSManagedObject reprezentująca pojedynczy rekord w modelu.
  • Persistent Store – fizyczny magazyn danych; najczęściej używany jest SQLite, ale dostępne są także formaty binary oraz XML.
  • Persistent Store Coordinator (PSC) – komponent koordynujący dostęp do jednego lub wielu persistent store równocześnie.
  • Fetch Request – zapytanie (klasa NSFetchRequest) umożliwiające pobieranie obiektów spełniających określone kryteria.

Architektura

Architektura Core Data opiera się na warstwach:

  1. Warstwa Model – opisuje strukturę danych w pliku .xcdatamodeld.
  2. Warstwa Managed Object Context – buforuje zmiany i zapewnia mechanizm cofania oraz operacji wsadowych.
  3. Warstwa Persistent Store Coordinator – tłumaczy operacje kontekstu na konkretne operacje w magazynie (np. SQL).
  4. Warstwa Persistent Store – fizyczny format przechowywania danych (SQLite, binary, XML, CloudKit).

Główne zalety

  • Abstrakcja warstwy bazodanowej – programista pracuje z obiektami, nie z zapytaniami SQL.
  • Obsługa grafu obiektów – automatyczne śledzenie relacji między encjami.
  • Wbudowane mechanizmy optymalizacji – m.in. faulting i batch fetching.
  • Zgodność z MVCmodel jest wyraźnie oddzielony od warstwy prezentacji.
  • Wsparcie dla wielowątkowości – każdy wątek może posiadać własny NSManagedObjectContext.
  • Integracja z iCloud i CloudKit – synchronizacja danych pomiędzy urządzeniami Apple.

Ograniczenia i krytyka

  • Brak pełnej kompatybilności z rzutowaniem SQL – nie wszystkie funkcje bazy są dostępne w warstwie abstrakcji.
  • Wysoki koszt pamięciowy przy nieoptymalnym użyciu faulting i fetch request.
  • Konieczność znajomości specjalnych narzędzi (Xcode, Instruments) do diagnostyki wydajności.
  • Trudność migracji schematu (Core Data Migration) w dużych projektach.

Przykładowe zastosowania

Core Data jest wykorzystywany w wielu aplikacjach Apple, m.in. w:

  • Kliencie poczty Mail.
  • Notatniku Notes.
  • Bankowości mobilnej i aplikacjach HealthKit.
  • Grach i aplikacjach SpriteKit, gdzie służy do przechowywania postępów gracza.

Porównanie z innymi technologiami

Technologia Platforma Model programistyczny Typ przechowywania Obsługa synchronizacji
Core Data Apple (iOS, macOS, itp.) Obiektowy (ORM) SQLite, binary, XML, CloudKit iCloud, CloudKit
Realm Wieloplatformowy Obiektowy Własny format Realm Sync
SQLite Wszystkie Relacyjny (SQL) Plik .sqlite Brak wbudowanego
Room (Android) Android ORM SQLite Firebase, własne rozwiązania

Przyszłość

Od 2022 roku Apple koncentruje się na integracji Core Data z SwiftData – nowym API, które ma uprościć deklaratywne definiowanie modeli oraz jeszcze lepszą współpracę z SwiftUI. W kolejnych wersjach planowane jest rozbudowanie wsparcia dla wielowątkowości oraz dalsza optymalizacja pod kątem Apple Silicon.

Bibliografia

  • Apple Developer Documentation – sekcja Core Data.
  • Patryk R. „Praktyczne zastosowanie Core Data w iOS” – wyd. Helion, 2020.
  • „iOS Programming: The Big Nerd Ranch Guide” – rozdział poświęcony Core Data.