Ich bin bereits mit relationalen Datenbanken vertraut und habe in der Vergangenheit SQLite (und andere Datenbanken) verwendet. Da Core Data jedoch einen gewissen Reiz hat, denke ich darüber nach, einige Zeit damit zu verbringen, es für die Verwendung in meiner nächsten Anwendung zu lernen.
Hat die Verwendung von Core Data gegenüber SQLite einen großen Vorteil oder umgekehrt? Was sind die Vor- und Nachteile von jedem?
Es fällt mir schwer, die Kosten für das Erlernen von Kerndaten zu rechtfertigen, wenn Apple sie nicht für viele seiner Flaggschiff-Anwendungen wie Mail.app oder iPhoto.app verwendet, sondern sich für SQLite-Datenbanken entscheidet. SQLite wird auch auf dem iPhone häufig verwendet.
Können diejenigen, die mit beiden vertraut sind, ihre Erfahrungen kommentieren? Vielleicht ist die Frage, wie bei den meisten Dingen, tiefer, als nur eine über die andere zu verwenden?
Antworten:
Obwohl Core Data ein Nachkomme von Apples Enterprise Object Framework ist , einem objektrelationalen Mapper (ORM), der eng mit einem relationalen Backend verbunden war / ist, ist Core Data kein ORM. Es ist in der Tat ein Framework zur Verwaltung von Objektgraphen. Es verwaltet ein potenziell sehr großes Diagramm von Objektinstanzen, sodass eine App mit einem Diagramm arbeiten kann, das nicht vollständig in den Speicher passt, indem Objekte bei Bedarf in und aus dem Speicher fehlerhaft ausgeführt werden. Core Data verwaltet auch Einschränkungen für Eigenschaften und Beziehungen und behält die Referenzintegrität bei (z. B. die Konsistenz von Vorwärts- und Rückwärtsverknüpfungen, wenn Objekte zu einer Beziehung hinzugefügt / daraus entfernt werden). Core Data ist somit ein idealer Rahmen für die Erstellung der "Modell" -Komponente einer MVC-Architektur.
Um die grafische Darstellung Management zu implementieren, Core Data geschieht SQLite als Plattenspeicher zu verwenden. Es könnte unter Verwendung einer anderen relationalen Datenbank oder sogar einer nicht relationalen Datenbank wie CouchDB implementiert worden sein . Wie andere bereits betont haben, kann Core Data auch XML oder ein Binärformat oder ein vom Benutzer geschriebenes Atomformat als Backend verwenden (obwohl diese Optionen erfordern, dass das gesamte Objektdiagramm in den Speicher passt). Wenn Sie daran interessiert sind, wie Core Data in einem SQLite-Backend implementiert wird, sollten Sie sich das OmniDataObjects- Framework von OmniGroup ansehen , eine Open-Source-Implementierung einer Teilmenge der Core Data-API. Das BaseTen- Framework ist auch eine Implementierung der Core Data API, die PostgreSQL als Backend verwendet.
Da Core Data kein ORM für SQLite sein soll, kann es kein beliebiges SQLite-Schema lesen. Umgekehrt sollten Sie sich nicht darauf verlassen können, dass Sie die SQLite-Datenspeicher von Core Data mit anderen SQLite-Tools lesen können. Das Schema ist ein Implementierungsdetail, das sich ändern kann.
Somit besteht kein wirklicher Konflikt zwischen der direkten Verwendung von Core Data oder SQLite. Wenn Sie eine relationale Datenbank wünschen, verwenden Sie SQLite (direkt oder über einen der Objective-C-Wrapper wie FMDB ) oder einen relationalen Datenbankserver. Möglicherweise möchten Sie jedoch weiterhin Core Data für die Verwendung als Framework zur Verwaltung von Objektgraphen erlernen. In Kombination mit den Controller-Klassen von Apple und den Widgets für die Schlüsselwertbindung können Sie eine vollständige MVC-Architektur mit sehr wenig Code implementieren .
quelle
Und mit iOS 5.0 erhalten Sie den zusätzlichen Vorteil, dass Sie die iCloud-Dateisynchronisierung kostenlos verwenden können, wenn Sie Core Data verwenden. Wenn Sie SQLite direkt verwenden, müssen Sie viel manuell basteln und implementieren, damit es über iCloud synchronisiert wird.
quelle
Core Data ist weniger ein Datenbankmodul als vielmehr eine API, die über den tatsächlichen Datenspeicher abstrahiert. Sie können Core Data anweisen, als SQLite-Datenbank, Plist, Binärdatei oder sogar als benutzerdefinierten Datenspeichertyp zu speichern.
Ich würde empfehlen, Core Data zu lernen, da dies eine hervorragende Ressource ist, die viele Teile der Entwicklung von Kakaoanwendungen erheblich beschleunigt.
quelle
SQLite ist eines der Datenbankformate für Core Data. Mit Core Data erhalten Sie eine bessere Integration mit dem Rest der Cocoa-API.
quelle