Manualului lipsă
pentru dezvoltarea Swift
Ghidul pe care aș fi vrut să-l am când am început
Alăturați-vă celor peste 20.000 de dezvoltatori care învață despre dezvoltarea Swift
Descărcați copia gratuită
Dacă citiți acest articol, presupun că sunteți nou în Core Data. Este posibil să fi auzit despre Core Data și ați dori să aflați dacă se potrivește pentru dumneavoastră sau pentru proiectul la care lucrați. Dacă această descriere vi se potrivește, atunci luați loc. Acest tutorial Core Data vă învață tot ce trebuie să știți pentru a înțelege mai bine ce este și ce nu este Core Data.
- Ce este Core Data
- Care sunt originile sale
- Unde se potrivește
- Gestionarea unui graf de obiecte
- Când să utilizați Core Data
- Cum diferă de SQLite
- SQLite
- Core Data
- Limitărilor Core Data
- Explorarea stivei Core Data
- Managed Object Model
- Managed Object Context
- Coordonatorul de stocare persistentă
- Magazinul persistent
- – un magazin în memorie
- Cum funcționează stiva de date de bază
- În câteva cuvinte
Ce este Core Data
Dezvoltatorii noi în cadrul de lucru foarte des nu-și fac timp să învețe ce este Core Data. Neștiind ce este Core Data, este foarte greu să îi înțeleagă intrările și ieșirile. Aș dori să petrec câteva minute explorând natura Core Data și, mai important, să clarificăm ce este și ce nu este Core Data.
Care sunt originile sale
Core Data este un cadru dezvoltat și întreținut de Apple. Există de mai bine de un deceniu și și-a făcut apariția pentru prima dată pe macOS odată cu lansarea macOS Tiger în 2005. În 2009, compania a făcut cadrul disponibil pe iOS odată cu lansarea iOS 3.
Unde se potrivește
Core Data este M în MVC, stratul de model al aplicației dumneavoastră. Chiar dacă Core Data poate persista datele pe disc, persistența datelor este, de fapt, o caracteristică opțională a cadrului. Core Data este în primul rând un cadru pentru gestionarea unui graf de obiecte.
Probabil că ați auzit și ați citit despre Core Data înainte de a urma acest curs. Asta înseamnă că poate știți deja că Core Data nu este o bază de date și că gestionează graful de obiecte al aplicației dumneavoastră. Ambele afirmații sunt adevărate. Dar ce înseamnă ele cu adevărat?
Gestionarea unui graf de obiecte
Core Data gestionează în primul rând un graf de obiecte. Un graf de obiecte nu este nimic mai mult decât o colecție de obiecte care sunt conectate între ele. Cadrul Core Data excelează în gestionarea grafurilor de obiecte complexe.
Se ocupă de gestionarea ciclului de viață al obiectelor din graful de obiecte și, opțional, poate persista graful de obiecte pe disc. De asemenea, oferă o interfață puternică pentru căutarea grafului de obiecte pe care îl gestionează.
Dar Core Data este mult mai mult decât atât. Cadrul adaugă o serie de alte caracteristici convingătoare, cum ar fi validarea intrărilor, versiunea modelului de date și urmărirea modificărilor.
Când să utilizați Core Data
Cadrul se potrivește perfect pentru o gamă largă de aplicații, dar nu toate aplicațiile ar trebui să utilizeze Core Data. Aplicațiile care au nevoie de un strat de model ușor nu ar trebui să utilizeze Core Data. Există multe biblioteci ușoare care oferă acest tip de funcționalitate.
Dacă sunteți în căutarea unui wrapper SQLite, atunci nici Core Data nu este ceea ce vă trebuie. Pentru un wrapper SQLite ușor și performant, vă recomand cu căldură FMDB al lui Gus Mueller. Această bibliotecă robustă și matură oferă o interfață orientată pe obiecte pentru a interacționa cu SQLite.
Core Data este o alegere excelentă dacă doriți o soluție care să gestioneze stratul de model al aplicației dumneavoastră.
Cum diferă de SQLite
Dezvoltatorii noi pentru Core Data sunt adesea confuzi de diferențele dintre SQLite și Core Data. Dacă vă întrebați dacă aveți nevoie de SQLite sau de Core Data, atunci vă puneți întrebarea greșită. Amintiți-vă că Core Data nu este o bază de date.
SQLite
SQLite este o bază de date ușoară care este foarte performantă și, prin urmare, se potrivește bine pentru aplicațiile mobile. Chiar dacă SQLite este promovat ca o bază de date relațională, este important să realizați că dumneavoastră, dezvoltatorul, sunteți responsabil de menținerea relațiilor dintre înregistrările stocate în baza de date.
Core Data
Core Data merge mult mai departe. Acesta oferă o abstractizare care vă permite să interacționați cu stratul de model într-o manieră orientată pe obiecte. Fiecare înregistrare cu care interacționați este un obiect. Core Data este responsabil pentru integritatea grafului de obiecte. Se asigură că graful de obiecte este menținut la zi.
Limitărilor Core Data
Chiar dacă Core Data este un cadru fantastic, există câteva dezavantaje. Aceste dezavantaje sunt direct legate de natura cadrului și de modul în care funcționează.
Core Data își poate face magia doar pentru că păstrează în memorie graficul de obiecte pe care îl gestionează. Acest lucru înseamnă că poate opera asupra înregistrărilor numai după ce acestea se află în memorie. Acest lucru este foarte diferit de efectuarea unei interogări SQL pe o bază de date. Dacă doriți să ștergeți mii de înregistrări, Core Data trebuie mai întâi să încarce fiecare înregistrare în memorie. Este de la sine înțeles că acest lucru duce la probleme de memorie și de performanță dacă se face în mod incorect.
O altă limitare importantă este modelul de threading al Core Data. Cadrul se așteaptă să fie rulat pe un singur fir de execuție. Din fericire, Core Data a evoluat dramatic de-a lungul anilor, iar cadrul a pus la punct diverse soluții pentru a face ca lucrul cu Core Data într-un mediu cu mai multe fire să fie mai sigur și mai ușor.
Pentru aplicațiile care trebuie să gestioneze un graf de obiecte complex, Core Data este foarte potrivit. Dacă aveți nevoie să stocați doar o mână de obiecte care nu au legătură între ele, atunci s-ar putea să vă fie mai bine cu o soluție ușoară sau cu sistemul implicit al utilizatorului.
Explorarea stivei Core Data
Acum că știți ce este și ce nu este Core Data, este timpul să faceți un zoom asupra elementelor constitutive ale cadrului. Este esențial să înțelegeți modul în care diferitele clase care fac ca cadrul să funcționeze să joace împreună.
Stelele cadrului sunt:
- modelul de obiecte gestionate
- contextul de obiecte gestionate
- și coordonatorul de stocare persistentă
Această diagramă arată modul în care aceste clase relaționează între ele. Să începem cu modelul de obiecte gestionate.
Managed Object Model
Modelul de obiecte gestionate este o instanță a clasei NSManagedObjectModel
. Deși o aplicație tipică Core Data are o instanță a clasei NSManagedObjectModel
, este posibil să aibă mai multe. Instanța modelului de obiecte gestionate reprezintă modelul de date al aplicației Core Data.
Diagrama de mai sus arată că modelul de obiecte gestionate este conectat la modelul de date. Modelul de date este reprezentat de un fișier din pachetul de aplicații care conține schema de date a aplicației. Schema de date nu este altceva decât o colecție de entități.
O entitate poate avea atribute și relații, care alcătuiesc modelul de date al aplicației. Amintiți-vă deocamdată că modelul de obiecte gestionate o instanță este din clasa NSManagedObjectModel
și că acesta reprezintă modelul de date al aplicației Core Data.
Managed Object Context
Un context de obiecte gestionate este reprezentat de o instanță a clasei NSManagedObjectContext
. O aplicație Core Data are unul sau mai multe contexte de obiecte gestionate, fiecare gestionând o colecție de obiecte model, instanțe ale clasei NSManagedObject
.
Diagrama pe care am explorat-o mai devreme ilustrează faptul că contextul de obiecte gestionate primește obiecte model prin intermediul unui coordonator de stocare persistentă. Acesta păstrează o referință la coordonatorul de stocare persistentă al aplicației.
Contextul de obiecte gestionate este obiectul cu care se interacționează cel mai mult. Acesta creează, citește, actualizează și șterge obiecte model. Din punctul de vedere al unui dezvoltator, clasa NSManagedObjectContext
este calul de bătaie al cadrului Core Data.
Coordonatorul de stocare persistentă
Coordonatorul de stocare persistentă este reprezentat de o instanță a clasei NSPersistentStoreCoordinator
și joacă un rol cheie în fiecare aplicație Core Data. Deși este posibil să existe mai mulți coordonatori de magazine persistente, majoritatea aplicațiilor au doar unul singur. Foarte, foarte rar este necesar să existe mai mulți coordonatori de stocare persistentă într-o aplicație.
Coordonatorul de stocare persistentă păstrează o referință la modelul de obiecte gestionate și fiecare context de obiecte gestionate părinte păstrează o referință la coordonatorul de stocare persistentă. Nu vă faceți griji cu privire la contextele de obiecte gestionate părinte și copil deocamdată.
Diagrama de mai sus ne arată că un coordonator al magazinului persistent este conectat la unul sau mai multe magazine persistente. Acest lucru ne aduce la magazinul persistent.
Magazinul persistent
Rețineți că Core Data gestionează un graf de obiecte. Cadrul este util numai dacă coordonatorul magazinului persistent este conectat la unul sau mai multe magazine persistente. Din start, Core Data acceptă trei tipuri de magazine persistente:
- o bază de date SQLite
- un magazin binar
– un magazin în memorie
Care tip de magazin persistent are avantajele și dezavantajele sale. Cele mai multe aplicații utilizează o bază de date SQLite ca magazin persistent. După cum am menționat mai devreme, SQLite este ușor și foarte rapid. Este excelent pentru aplicațiile mobile și desktop.
Cum funcționează stiva de date de bază
Acum că știți din ce constă stiva de date de bază, este timpul să explorați modul în care funcționează într-o aplicație. Inima unei aplicații Core Data este coordonatorul de stocare persistentă. Coordonatorul de stocare persistentă este instanțiat mai întâi atunci când este creată stiva Core Data.
Dar pentru a crea coordonatorul de stocare persistentă, avem nevoie de un model de obiect gestionat. De ce se întâmplă acest lucru? Coordonatorul de stocare persistentă trebuie să știe cum arată schema de date a aplicației.
După configurarea coordonatorului de stocare persistentă și a modelului de obiecte gestionate, se inițializează calul de bătaie al stivei de date de bază, contextul de obiecte gestionate. Rețineți că un context de obiecte gestionate păstrează o referință la coordonatorul de stocare persistentă.
Cu stiva Core Data configurată, aplicația este pregătită să utilizeze Core Data pentru a interacționa cu stocul persistent al aplicației. În cele mai multe cazuri, aplicația dumneavoastră interacționează cu coordonatorul de stocare persistentă prin intermediul contextului de obiecte gestionate.
Rarori, sau chiar niciodată, veți interacționa direct cu coordonatorul de stocare persistentă sau cu modelul de obiecte gestionate. După cum am menționat mai devreme, clasa NSManagedObjectContext
este clasa cu care interacționați cel mai frecvent.
Contextul obiectului gestionat este utilizat pentru a crea, citi, actualiza și șterge înregistrări. Atunci când modificările efectuate în contextul obiectului gestionat sunt salvate, contextul obiectului gestionat le împinge către coordonatorul magazinului persistent, care trimite modificările către magazinul persistent corespunzător.
Dacă aplicația dvs. are mai multe magazine persistente, coordonatorul magazinului persistent își dă seama ce magazin persistent trebuie să stocheze modificările contextului obiect gestionat.
În câteva cuvinte
Cunoașteți acum elementele fundamentale ale cadrului Core Data. Sunteți deja în fața curbei, deoarece majoritatea dezvoltatorilor sar peste acest pas. Următorul pas pe care trebuie să îl faceți este să începeți să folosiți cadrul. Dacă aveți nevoie de o mână de ajutor, vă recomand să consultați 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
.