The Missing Manual
for Swift Development
The Guide I Wish I Wish I Have When I Started Out
Join 20,000+ Developers Learning About Swift Development
Download Your Free Copy
If you are reading this, then I assume you are new to Core Data. Lehet, hogy már hallottál a Core Data-ról, és szeretnéd megtudni, hogy megfelel-e neked vagy a projektnek, amin dolgozol. Ha ez a leírás illik Önre, akkor foglaljon helyet. Ez a Core Data bemutató megtanít mindent, amit tudnia kell ahhoz, hogy jobban megértse, mi a Core Data és mi nem.
- Mi a Core Data
- Mi az eredete
- Hová illik
- Az objektumgráf kezelése
- Mikor használjuk a Core Data-t
- Hogyan különbözik az SQLite-től
- SQLite
- Core Data
- Core Data Korlátozások
- A Core Data Stack felfedezése
- Managed Object Model
- Managed Object Context
- Persistent Store Coordinator
- Persistent Store
- – egy memórián belüli tároló
- Hogyan működik a Core Data Stack
- Dióhéjban
Mi a Core Data
A keretrendszerrel újonnan ismerkedő fejlesztők nagyon gyakran nem szánnak időt arra, hogy megtudják, mi a Core Data. Ha nem tudjuk, mi az a Core Data, akkor nagyon nehéz megérteni annak minden csínját-bínját. Szeretnék néhány percet azzal tölteni, hogy feltárjam a Core Data természetét, és ami még fontosabb, tisztázzuk, hogy mi a Core Data és mi nem az.
Mi az eredete
A Core Data egy keretrendszer, amelyet az Apple fejlesztett ki és tart fenn. Több mint egy évtizede létezik, és először a macOS-en jelent meg a macOS Tiger 2005-ös kiadásával. A vállalat 2009-ben az iOS 3 kiadásával tette elérhetővé a keretrendszert iOS-en.
Hová illik
A Core Data az M az MVC-ben, az alkalmazásod modellrétege. Annak ellenére, hogy a Core Data képes az adatok lemezre történő perzisztenciájára, az adatperzisztencia valójában a keretrendszer opcionális funkciója. A Core Data elsősorban egy objektumgráf kezelésére szolgáló keretrendszer.
Valószínűleg már hallott és olvasott a Core Data-ról, mielőtt ezt a kurzust elvégezte volna. Ez azt jelenti, hogy talán már tudja, hogy a Core Data nem egy adatbázis, és hogy az alkalmazás objektumgráfját kezeli. Mindkét állítás igaz. De mit is jelentenek valójában?
Az objektumgráf kezelése
A Core Data mindenekelőtt egy objektumgráfot kezel. Az objektumgráf nem más, mint egymással összekapcsolt objektumok gyűjteménye. A Core Data keretrendszer kiválóan alkalmas az összetett objektumgráfok kezelésére.
Gondoskodik az objektumgráfban lévő objektumok életciklusának kezeléséről, és opcionálisan képes az objektumgráfot lemezen tartósítani. Emellett egy hatékony felületet kínál az általa kezelt objektumgráf kereséséhez.
A Core Data azonban ennél sokkal több. A keretrendszer számos más meggyőző funkcióval is kiegészül, mint például a bemeneti érvényesítés, az adatmodell verziókezelése és a változáskövetés.
Mikor használjuk a Core Data-t
A keretrendszer az alkalmazások széles köréhez tökéletesen illeszkedik, de nem minden alkalmazásnak érdemes a Core Data-t használni. Azoknak az alkalmazásoknak, amelyeknek könnyű modellrétegre van szükségük, nem szabad Core Data-t használniuk. Számos olyan könnyűsúlyú könyvtár létezik, amely ilyen típusú funkciókat biztosít.
Ha egy SQLite wrappert keres, akkor szintén nem a Core Data az, amire szüksége van. Ha egy könnyűsúlyú, teljesítőképes SQLite wrapperről van szó, akkor nagyon ajánlom Gus Mueller FMDB-jét. Ez a robusztus, kiforrott könyvtár objektumorientált felületet biztosít az SQLite-tel való interakcióhoz.
A Core Data kiváló választás, ha olyan megoldást szeretne, amely az alkalmazás modellrétegét kezeli.
Hogyan különbözik az SQLite-től
A Core Data-t újonnan ismerő fejlesztőket gyakran összezavarják az SQLite és a Core Data közötti különbségek. Ha azon tűnődik, hogy az SQLite-ra vagy a Core Data-ra van-e szüksége, akkor rossz kérdést tesz fel. Ne feledje, hogy a Core Data nem egy adatbázis.
SQLite
A SQLite egy könnyűsúlyú adatbázis, amely igen nagy teljesítményű, és ezért jól használható mobilalkalmazásokhoz. Bár az SQLite-ot relációs adatbázisként hirdetik, fontos tudatosítani, hogy az adatbázisban tárolt rekordok közötti kapcsolatok fenntartásáért Ön, a fejlesztő a felelős.
Core Data
A Core Data sokkal tovább megy. Olyan absztrakciót biztosít, amely lehetővé teszi, hogy objektumorientált módon lépjen kapcsolatba a modellréteggel. Minden rekord, amellyel interakcióba lépsz, egy objektum. A Core Data felelős az objektumgráf integritásáért. Biztosítja az objektumgráf naprakészen tartását.
Core Data Korlátozások
Noha a Core Data egy fantasztikus keretrendszer, számos hátránya is van. Ezek a hátrányok közvetlenül a keretrendszer természetéhez és működéséhez kapcsolódnak.
A Core Data csak azért képes varázsolni, mert az általa kezelt objektumgráfot a memóriában tartja. Ez azt jelenti, hogy csak akkor tud a rekordokkal operálni, ha azok már a memóriában vannak. Ez nagyban különbözik attól, mintha SQL-lekérdezést hajtana végre egy adatbázisban. Ha több ezer rekordot szeretne törölni, a Core Data-nak először minden rekordot be kell töltenie a memóriába. Magától értetődik, hogy ez memória- és teljesítményproblémákat eredményez, ha helytelenül végezzük.
Egy másik fontos korlátozás a Core Data szálkezelési modellje. A keretrendszer elvárja, hogy egyetlen szálon fusson. Szerencsére a Core Data az évek során drámaian fejlődött, és a keretrendszer különböző megoldásokat vezetett be annak érdekében, hogy a Core Data-val való munka többszálas környezetben biztonságosabb és egyszerűbb legyen.
Azoknak az alkalmazásoknak, amelyeknek komplex objektumgráfot kell kezelniük, a Core Data kiválóan megfelel. Ha csak egy maroknyi, egymástól független objektumot kell tárolni, akkor lehet, hogy jobban járunk egy könnyített megoldással vagy a felhasználói alapértelmezett rendszerrel.
A Core Data Stack felfedezése
Most, hogy tudjuk, mi a Core Data és mi nem, itt az ideje, hogy ráközelítsünk a keretrendszer építőköveire. Lényeges, hogy megértse, hogyan működnek együtt a keretrendszer működését biztosító különböző osztályok.
A keretrendszer sztárjai:
- a kezelt objektummodell
- a kezelt objektumkörnyezet
- és a tartós tároló koordinátor
Az ábrán látható, hogyan kapcsolódnak ezek az osztályok egymáshoz. Kezdjük a menedzselt objektummodellel.
Managed Object Model
A menedzselt objektummodell a NSManagedObjectModel
osztály egy példánya. Míg egy tipikus Core Data alkalmazásban egy példánya van a NSManagedObjectModel
osztálynak, lehetséges, hogy több példánya is van. A menedzselt objektummodell példánya képviseli a Core Data alkalmazás adatmodelljét.
A fenti ábrán látható, hogy a menedzselt objektummodell kapcsolódik az adatmodellhez. Az adatmodellt az alkalmazáscsomagban található fájl képviseli, amely az alkalmazás adatsémáját tartalmazza. Az adatséma nem más, mint entitások gyűjteménye.
Egy entitásnak lehetnek attribútumai és kapcsolatai, amelyek az alkalmazás adatmodelljét alkotják. Egyelőre ne feledjük, hogy a menedzselt objektummodell egy példánya a NSManagedObjectModel
osztály, és ez a Core Data alkalmazás adatmodelljét képviseli.
Managed Object Context
A menedzselt objektumkontextust a NSManagedObjectContext
osztály egy példánya képviseli. Egy Core Data alkalmazás egy vagy több menedzselt objektum-kontextussal rendelkezik, amelyek mindegyike modellobjektumok gyűjteményét, a NSManagedObject
osztály példányait kezeli.
A korábban vizsgált diagram azt szemlélteti, hogy a menedzselt objektum-kontextus modellobjektumokat kap egy tartós tároló koordinátoron keresztül. Hivatkozást tart az alkalmazás perzisztens tároló koordinátorára.
A kezelt objektumkörnyezet az az objektum, amellyel a legtöbbet interakcióba lépünk. Modellobjektumokat hoz létre, olvas, frissít és töröl. A fejlesztő szempontjából a NSManagedObjectContext
osztály a Core Data keretrendszer munkagépe.
Persistent Store Coordinator
A perzisztens tároló koordinátort a NSPersistentStoreCoordinator
osztály egy példánya képviseli, és kulcsszerepet játszik minden Core Data alkalmazásban. Bár lehetséges, hogy több perzisztens tároló koordinátor is legyen, a legtöbb alkalmazásban csak egy van. Nagyon-nagyon ritkán van szükség arra, hogy egy alkalmazásban több állandó tároló koordinátor legyen.
A állandó tároló koordinátor hivatkozást tart a kezelt objektummodellre, és minden szülő kezelt objektumkörnyezet hivatkozást tart a állandó tároló koordinátorra. A szülői és a gyermek menedzselt objektum-kontextusokkal egyelőre ne foglalkozzunk.
A fenti ábrából láthatjuk, hogy a perzisztens tároló koordinátor egy vagy több perzisztens tárolóhoz kapcsolódik. Ezzel elérkeztünk a perzisztens tárolóhoz.
Persistent Store
Emlékezzünk arra, hogy a Core Data egy objektumgráfot kezel. A keretrendszer csak akkor hasznos, ha a perzisztens tároló koordinátor egy vagy több perzisztens tárolóhoz kapcsolódik. A Core Data alapból három perzisztens tároló típust támogat:
- egy SQLite adatbázis
- egy bináris tároló
– egy memórián belüli tároló
Minden perzisztens tároló típusnak megvannak az előnyei és hátrányai. A legtöbb alkalmazás SQLite adatbázist használ állandó tárolóként. Ahogy korábban említettem, az SQLite könnyű és nagyon gyors. Kiválóan alkalmas mobil és asztali alkalmazásokhoz.
Hogyan működik a Core Data Stack
Most, hogy tudjuk, miből áll a Core Data stack, itt az ideje, hogy megvizsgáljuk, hogyan működik egy alkalmazásban. A Core Data-alkalmazás szíve a perzisztens tároló koordinátor. A perzisztens tároló koordinátort instanciáljuk először a Core Data verem létrehozásakor.
A perzisztens tároló koordinátor létrehozásához azonban szükségünk van egy menedzselt objektummodellre. Miért van ez így? A perzisztens tároló koordinátornak tudnia kell, hogyan néz ki az alkalmazás adatsémája.
A perzisztens tároló koordinátor és a menedzselt objektummodell beállítása után a Core Data Stack munkagépe, a menedzselt objektumkörnyezet inicializálása következik. Ne feledje, hogy a kezelt objektumkörnyezet hivatkozást tart a tartós tároló koordinátorára.
A Core Data verem beállításával az alkalmazás készen áll a Core Data használatára az alkalmazás tartós tárolójával való interakcióhoz. A legtöbb esetben az alkalmazás a kezelt objektumkörnyezeten keresztül lép kölcsönhatásba a tartós tároló koordinátorával.
Ritkán, vagy egyáltalán nem lép közvetlenül kapcsolatba a tartós tároló koordinátorával vagy a kezelt objektummodellel. Ahogy korábban említettem, a NSManagedObjectContext
osztály az az osztály, amellyel a leggyakrabban interakcióba lépsz.
A kezelt objektumkörnyezetet rekordok létrehozására, olvasására, frissítésére és törlésére használjuk. Amikor a menedzselt objektumkörnyezetben végrehajtott módosításokat mentjük, a menedzselt objektumkörnyezet továbbítja azokat a tartós tároló koordinátornak, amely elküldi a változásokat a megfelelő tartós tárolóba.
Ha az alkalmazás több tartós tárolóval rendelkezik, a tartós tároló koordinátor kitalálja, hogy melyik tartós tárolónak kell tárolnia a kezelt objektumkörnyezet változásait.
Dióhéjban
Most már ismeri a Core Data keretrendszer alapjait. Ezzel máris előrébb jársz, mert a legtöbb fejlesztő kihagyja ezt a lépést. A következő lépés, amit meg kell tenned, hogy elkezded használni a keretrendszert. Ha segítségre van szükséged, ajánlom, hogy nézd meg a Mastering Core Data With Swift című könyvet.
The Missing Manual
for Swift Development
The Guide I Wish I Have I Have When I Started Out
Join 20,000+ Developers Learning About Swift Development
Download Your Free Copy
.