Das fehlende Handbuch
für die Swift-Entwicklung herunter
Das Handbuch, das ich gerne gehabt hätte, als ich anfing
Schließen Sie sich 20.000+ Entwicklern an, die etwas über die Swift-Entwicklung lernen
Laden Sie Ihr kostenloses Exemplar herunter
Wenn Sie dies lesen, dann nehme ich an, dass Sie neu bei Core Data sind. Vielleicht haben Sie schon von Core Data gehört und möchten herausfinden, ob es für Sie oder das Projekt, an dem Sie arbeiten, in Frage kommt. Wenn diese Beschreibung auf Sie zutrifft, dann nehmen Sie Platz. In diesem Core Data-Tutorial erfahren Sie alles, was Sie wissen müssen, um besser zu verstehen, was Core Data ist und was nicht.
- Was ist Core Data
- Was sind die Ursprünge
- Wo passt es hinein
- Verwaltung eines Objektgraphen
- Wann sollte man Core Data verwenden
- Wie unterscheidet es sich von SQLite
- SQLite
- Core Data
- Core Data Einschränkungen
- Den Core Data Stack erkunden
- Managed Object Model
- Managed Object Context
- Persistent Store Coordinator
- Persistenter Speicher
- – einen In-Memory-Speicher
- Wie funktioniert der Core Data Stack
- In a Nutshell
Was ist Core Data
Entwickler, die neu in das Framework einsteigen, nehmen sich oft nicht die Zeit, um zu lernen, was Core Data ist. Wenn man nicht weiß, was Core Data ist, ist es sehr schwierig, die Einzelheiten zu verstehen. Ich möchte ein paar Minuten damit verbringen, das Wesen von Core Data zu erkunden und, was noch wichtiger ist, zu klären, was Core Data ist und was nicht.
Was sind die Ursprünge
Core Data ist ein Framework, das von Apple entwickelt und gepflegt wird. Es existiert seit mehr als einem Jahrzehnt und wurde erstmals mit der Veröffentlichung von macOS Tiger im Jahr 2005 in macOS eingeführt. Im Jahr 2009 stellte das Unternehmen das Framework mit der Veröffentlichung von iOS 3 für iOS zur Verfügung.
Wo passt es hinein
Core Data ist das M in MVC, die Modellschicht Ihrer Anwendung. Auch wenn Core Data Daten auf der Festplatte speichern kann, ist die Datenpersistenz ein optionales Feature des Frameworks. Core Data ist in erster Linie ein Framework zur Verwaltung eines Objektgraphen.
Sie haben wahrscheinlich schon von Core Data gehört und gelesen, bevor Sie diesen Kurs besucht haben. Das bedeutet, dass Sie vielleicht schon wissen, dass Core Data keine Datenbank ist und dass es den Objektgraphen Ihrer Anwendung verwaltet. Beide Aussagen sind richtig. Aber was bedeuten sie wirklich?
Verwaltung eines Objektgraphen
Core Data verwaltet in erster Linie einen Objektgraphen. Ein Objektgraph ist nichts anderes als eine Sammlung von Objekten, die miteinander verbunden sind. Das Core Data-Framework eignet sich hervorragend für die Verwaltung komplexer Objektgraphen.
Es kümmert sich um die Verwaltung des Lebenszyklus der Objekte im Objektgraph und kann den Objektgraph optional auf der Festplatte speichern. Außerdem bietet es eine leistungsfähige Schnittstelle zum Durchsuchen des von ihm verwalteten Objektgraphen.
Aber Core Data ist viel mehr als das. Das Framework fügt eine Reihe weiterer überzeugender Funktionen hinzu, wie z.B. Eingabevalidierung, Versionierung des Datenmodells und Änderungsverfolgung.
Wann sollte man Core Data verwenden
Das Framework eignet sich perfekt für eine Vielzahl von Anwendungen, aber nicht jede Anwendung sollte Core Data verwenden. Anwendungen, die eine leichtgewichtige Modellschicht benötigen, sollten Core Data nicht verwenden. Es gibt viele leichtgewichtige Bibliotheken, die diese Art von Funktionalität bieten.
Wenn Sie nach einem SQLite-Wrapper suchen, dann ist Core Data auch nicht das, was Sie brauchen. Für einen leichtgewichtigen, performanten SQLite-Wrapper empfehle ich FMDB von Gus Mueller. Diese robuste, ausgereifte Bibliothek bietet eine objektorientierte Schnittstelle für die Interaktion mit SQLite.
Core Data ist eine ausgezeichnete Wahl, wenn Sie eine Lösung suchen, die die Modellschicht Ihrer Anwendung verwaltet.
Wie unterscheidet es sich von SQLite
Entwickler, die Core Data zum ersten Mal einsetzen, sind oft verwirrt über die Unterschiede zwischen SQLite und Core Data. Wenn Sie sich fragen, ob Sie SQLite oder Core Data brauchen, dann stellen Sie die falsche Frage. Denken Sie daran, dass Core Data keine Datenbank ist.
SQLite
SQLite ist eine leichtgewichtige Datenbank, die sehr leistungsfähig ist und sich daher gut für mobile Anwendungen eignet. Auch wenn SQLite als relationale Datenbank beworben wird, ist es wichtig zu wissen, dass Sie als Entwickler für die Pflege der Beziehungen zwischen den in der Datenbank gespeicherten Datensätzen verantwortlich sind.
Core Data
Core Data geht viel weiter. Es bietet eine Abstraktion, die es Ihnen ermöglicht, mit der Modellschicht auf objektorientierte Weise zu interagieren. Jeder Datensatz, mit dem Sie interagieren, ist ein Objekt. Core Data ist für die Integrität des Objektgraphen verantwortlich. Es stellt sicher, dass der Objektgraph auf dem neuesten Stand gehalten wird.
Core Data Einschränkungen
Auch wenn Core Data ein fantastisches Framework ist, gibt es einige Nachteile. Diese Nachteile stehen in direktem Zusammenhang mit der Natur des Frameworks und seiner Funktionsweise.
Core Data kann seine Magie nur entfalten, weil es den von ihm verwalteten Objektgraphen im Speicher hält. Das bedeutet, dass es nur mit Datensätzen arbeiten kann, wenn sie sich im Speicher befinden. Das ist etwas ganz anderes als eine SQL-Abfrage in einer Datenbank. Wenn Sie Tausende von Datensätzen löschen wollen, muss Core Data zunächst jeden einzelnen Datensatz in den Speicher laden. Es versteht sich von selbst, dass dies bei falscher Ausführung zu Speicher- und Leistungsproblemen führt.
Eine weitere wichtige Einschränkung ist das Threading-Modell von Core Data. Das Framework erwartet, dass es auf einem einzigen Thread ausgeführt wird. Glücklicherweise hat sich Core Data im Laufe der Jahre stark weiterentwickelt und das Framework hat verschiedene Lösungen entwickelt, die die Arbeit mit Core Data in einer Multithreading-Umgebung sicherer und einfacher machen.
Für Anwendungen, die einen komplexen Objektgraphen verwalten müssen, ist Core Data hervorragend geeignet. Wenn Sie nur eine Handvoll nicht zusammenhängender Objekte speichern müssen, dann sind Sie mit einer leichtgewichtigen Lösung oder dem System mit Benutzerdefault besser dran.
Den Core Data Stack erkunden
Nun, da Sie wissen, was Core Data ist und was nicht, ist es an der Zeit, die Bausteine des Frameworks näher zu betrachten. Es ist wichtig, dass Sie verstehen, wie die verschiedenen Klassen, die das Framework ausmachen, zusammenspielen.
Die Stars des Frameworks sind:
- das Managed Object Model
- der Managed Object Context
- und der Persistent Store Coordinator
Dieses Diagramm zeigt, wie sich diese Klassen zueinander verhalten. Beginnen wir mit dem Managed Object Model.
Managed Object Model
Das Managed Object Model ist eine Instanz der Klasse NSManagedObjectModel
. Während eine typische Core Data-Anwendung eine Instanz der Klasse NSManagedObjectModel
hat, ist es möglich, mehrere zu haben. Die Instanz des verwalteten Objektmodells stellt das Datenmodell der Core Data-Anwendung dar.
Das obige Diagramm zeigt, dass das verwaltete Objektmodell mit dem Datenmodell verbunden ist. Das Datenmodell wird durch eine Datei im Anwendungsbundle repräsentiert, die das Datenschema der Anwendung enthält. Das Datenschema ist nichts anderes als eine Sammlung von Entitäten.
Eine Entität kann Attribute und Beziehungen haben, die das Datenmodell der Anwendung ausmachen. Erinnern Sie sich jetzt daran, dass das verwaltete Objektmodell eine Instanz der NSManagedObjectModel
Klasse ist und dass es das Datenmodell der Core Data Anwendung darstellt.
Managed Object Context
Ein verwalteter Objektkontext wird durch eine Instanz der NSManagedObjectContext
Klasse dargestellt. Eine Core Data-Anwendung hat einen oder mehrere verwaltete Objektkontexte, von denen jeder eine Sammlung von Modellobjekten, Instanzen der Klasse NSManagedObject
, verwaltet.
Das Diagramm, das wir zuvor untersucht haben, zeigt, dass der verwaltete Objektkontext Modellobjekte über einen Persistent Store Coordinator erhält. Er hält einen Verweis auf den Persistent Store Coordinator der Anwendung.
Der verwaltete Objektkontext ist das Objekt, mit dem Sie am meisten interagieren. Er erstellt, liest, aktualisiert und löscht Modellobjekte. Aus der Sicht eines Entwicklers ist die Klasse NSManagedObjectContext
das Arbeitspferd des Core Data Frameworks.
Persistent Store Coordinator
Der Persistent Store Coordinator wird durch eine Instanz der Klasse NSPersistentStoreCoordinator
repräsentiert und spielt eine Schlüsselrolle in jeder Core Data Anwendung. Es ist zwar möglich, mehrere Persistent Store Coordinators zu haben, aber die meisten Anwendungen haben nur einen. Sehr, sehr selten besteht die Notwendigkeit, mehrere Persistent-Store-Koordinatoren in einer Anwendung zu haben.
Der Persistent-Store-Koordinator behält einen Verweis auf das verwaltete Objektmodell und jeder übergeordnete verwaltete Objektkontext behält einen Verweis auf den Persistent-Store-Koordinator. Kümmern Sie sich vorerst nicht um übergeordnete und untergeordnete verwaltete Objektkontexte.
Das obige Diagramm zeigt uns, dass ein Persistent Store Coordinator mit einem oder mehreren Persistent Stores verbunden ist. Dies bringt uns zum persistenten Speicher.
Persistenter Speicher
Erinnern Sie sich, dass Core Data einen Objektgraph verwaltet. Das Framework ist nur sinnvoll, wenn der Koordinator des persistenten Speichers mit einem oder mehreren persistenten Speichern verbunden ist. Core Data unterstützt von Haus aus drei Arten von persistenten Speichern:
- eine SQLite-Datenbank
- einen binären Speicher
– einen In-Memory-Speicher
Jeder persistente Speichertyp hat seine Vor- und Nachteile. Die meisten Anwendungen verwenden eine SQLite-Datenbank als persistenten Speicher. Wie ich bereits erwähnt habe, ist SQLite leichtgewichtig und sehr schnell. Es eignet sich hervorragend für mobile und Desktop-Anwendungen.
Wie funktioniert der Core Data Stack
Nachdem Sie nun wissen, woraus der Core Data Stack besteht, ist es an der Zeit zu untersuchen, wie er in einer Anwendung funktioniert. Das Herzstück einer Core Data Anwendung ist der Persistent Store Coordinator. Der Persistent Store Coordinator wird zuerst instanziiert, wenn der Core Data Stack erstellt wird.
Aber um den Persistent Store Coordinator zu erstellen, brauchen wir ein Managed Object Model. Warum ist das so? Der Persistent Store Coordinator muss wissen, wie das Datenschema der Anwendung aussieht.
Nach dem Einrichten des Persistent Store Coordinators und des Managed Object Models wird das Arbeitspferd des Core Data Stacks initialisiert, der Managed Object Context. Denken Sie daran, dass ein verwalteter Objektkontext einen Verweis auf den Koordinator des persistenten Speichers enthält.
Nach der Einrichtung des Core Data Stacks ist die Anwendung bereit, Core Data zur Interaktion mit dem persistenten Speicher der Anwendung zu verwenden. In den meisten Fällen interagiert Ihre Anwendung mit dem Koordinator des persistenten Speichers über den verwalteten Objektkontext.
Sie werden selten, wenn überhaupt, direkt mit dem Koordinator des persistenten Speichers oder dem verwalteten Objektmodell interagieren. Wie bereits erwähnt, ist die Klasse NSManagedObjectContext
die Klasse, mit der Sie am häufigsten interagieren.
Der verwaltete Objektkontext wird zum Erstellen, Lesen, Aktualisieren und Löschen von Datensätzen verwendet. Wenn die im verwalteten Objektkontext vorgenommenen Änderungen gespeichert werden, gibt der verwaltete Objektkontext sie an den Koordinator des persistenten Speichers weiter, der die Änderungen an den entsprechenden persistenten Speicher sendet.
Wenn Ihre Anwendung mehrere persistente Speicher hat, findet der Koordinator des persistenten Speichers heraus, welcher persistente Speicher die Änderungen des verwalteten Objektkontexts speichern muss.
In a Nutshell
Sie kennen jetzt die Grundlagen des Core Data Frameworks. Sie haben bereits einen großen Vorsprung, denn die meisten Entwickler überspringen diesen Schritt. Der nächste Schritt, den Sie tun müssen, ist die Verwendung des Frameworks. Wenn Sie Hilfe brauchen, empfehle ich Ihnen das Buch Mastering Core Data With Swift.
The Missing Manual
for Swift Development
The Guide I Wish I Had When I Started Out
Join 20,000+ Developers Learning About Swift Development
Download Your Free Copy