The Missing Manual
for Swift Development
The Guide I Wish I Have I had When I Started Out
Join 20,000+ Developers Learning About Swift Development
Download Your Free Copy
Jos luet tätä, oletan, että olet aloittanut uuden Core Datan käytön. Olet ehkä kuullut Core Datasta ja haluat selvittää, sopiiko se sinulle tai projektille, jonka parissa työskentelet. Jos tämä kuvaus sopii sinuun, istu alas. Tämä Core Data -opas opettaa sinulle kaiken, mitä sinun tarvitsee tietää, jotta ymmärrät paremmin, mitä Core Data on ja mitä se ei ole.
- Mitä Core Data on
- Mitä sen alkuperä on
- Mihin se sopii
- Objektigraafin hallinta
- Milloin Core Dataa kannattaa käyttää
- Miten se eroaa SQLitestä
- SQLite
- Core Data
- Core Datan rajoitukset
- Exploring the Core Data Stack
- Hallittu oliomalli
- Hallittu oliokonteksti
- Pysyvän tallennuspaikan koordinaattori
- Pysyvä varasto
- – muistissa oleva tallennustyyppi
- Miten ydintietopino toimii
- Yhdessä pähkinänkuoressa
Mitä Core Data on
Kehityskehyksen uudet kehittäjät eivät hyvin usein käytä aikaa siihen, että oppisivat, mitä Core Data on. Kun ei tiedetä, mitä Core Data on, on hyvin vaikea ymmärtää sen ominaisuuksia. Haluaisin käyttää muutaman minuutin Core Datan luonteen tutkimiseen ja ennen kaikkea sen selventämiseen, mitä Core Data on ja mitä se ei ole.
Mitä sen alkuperä on
Core Data on Applen kehittämä ja ylläpitämä kehys. Se on ollut olemassa jo yli kymmenen vuotta, ja se ilmestyi ensimmäisen kerran macOS-käyttöjärjestelmään macOS Tigerin julkaisun yhteydessä vuonna 2005. Vuonna 2009 yhtiö teki kehyksen saataville iOS:ssä iOS 3:n julkaisun myötä.
Mihin se sopii
Core Data on MVC:n M-kohta eli sovelluksesi mallikerros. Vaikka Core Data voi säilyttää tietoja levylle, tietojen pysyvyys on itse asiassa kehyksen valinnainen ominaisuus. Core Data on ennen kaikkea kehys objektigraafin hallintaan.
Olet luultavasti kuullut ja lukenut Core Datasta ennen tämän kurssin käymistä. Se tarkoittaa, että saatat jo tietää, että Core Data ei ole tietokanta ja että se hallinnoi sovelluksesi oliograafia. Molemmat väitteet ovat totta. Mutta mitä ne oikeastaan tarkoittavat?
Objektigraafin hallinta
Core Data hallitsee ennen kaikkea objektigraafia. Objektigraafi ei ole mitään muuta kuin kokoelma objekteja, jotka ovat yhteydessä toisiinsa. Core Data -kehys on erinomainen monimutkaisten objektigraafien hallinnassa.
Se huolehtii objektigraafin objektien elinkaaren hallinnasta ja voi valinnaisesti säilyttää objektigraafin levyllä. Se tarjoaa myös tehokkaan käyttöliittymän hallinnoimansa objektigraafin hakuun.
Mutta Core Data on paljon muutakin. Kehys lisää useita muita kiehtovia ominaisuuksia, kuten syötteen validoinnin, tietomallin versioinnin ja muutosten seurannan.
Milloin Core Dataa kannattaa käyttää
Kehys sopii erinomaisesti monenlaisiin sovelluksiin, mutta kaikkien sovellusten ei kuitenkaan kannata käyttää Core Dataa. Sovellusten, jotka tarvitsevat kevyen mallikerroksen, ei pitäisi käyttää Core Dataa. On olemassa monia kevyitä kirjastoja, jotka tarjoavat tämäntyyppisiä toimintoja.
Jos etsit SQLite-käärettä, Core Data ei myöskään ole sitä, mitä tarvitset. Jos haluat kevyen ja suorituskykyisen SQLite-käärön, suosittelen Gus Muellerin FMDB:tä. Tämä vankka, kypsä kirjasto tarjoaa oliopohjaisen käyttöliittymän SQLiten kanssa toimimiseen.
Core Data on erinomainen valinta, jos haluat ratkaisun, joka hallinnoi sovelluksesi mallikerrosta.
Miten se eroaa SQLitestä
Core Dataa vasta-alkajat ovat usein hämmentyneitä SQLiten ja Core Datan eroista. Jos mietit, tarvitsetko SQLiteä vai Core Dataa, kysyt väärän kysymyksen. Muista, että Core Data ei ole tietokanta.
SQLite
SQLite on kevyt tietokanta, joka on erittäin suorituskykyinen ja sopii siksi hyvin mobiilisovelluksiin. Vaikka SQLiteä mainostetaan relaatiotietokantana, on tärkeää ymmärtää, että sinä, kehittäjä, olet vastuussa tietokantaan tallennettujen tietueiden välisten suhteiden ylläpitämisestä.
Core Data
Core Data menee paljon pidemmälle. Se tarjoaa abstraktion, jonka avulla voit olla vuorovaikutuksessa mallikerroksen kanssa oliosuuntautuneesti. Jokainen tietue, jonka kanssa olet vuorovaikutuksessa, on objekti. Core Data vastaa objektigraafin eheydestä. Se varmistaa, että objektigraafi pysyy ajan tasalla.
Core Datan rajoitukset
Vaikka Core Data on loistava kehys, siinä on useita haittoja. Nämä haitat liittyvät suoraan kehyksen luonteeseen ja siihen, miten se toimii.
Core Data voi tehdä taikojaan vain, koska se pitää hallinnoimansa objektigraafin muistissa. Tämä tarkoittaa, että se voi operoida tietueilla vain, kun ne ovat muistissa. Tämä on hyvin erilaista kuin SQL-kyselyn suorittaminen tietokannalle. Jos haluat poistaa tuhansia tietueita, Core Datan on ensin ladattava jokainen tietue muistiin. On sanomattakin selvää, että tämä johtaa muisti- ja suorituskykyongelmiin, jos se tehdään väärin.
Toinen tärkeä rajoitus on Core Datan säikeistämismalli. Kehys odottaa, että sitä ajetaan yhdessä säikeessä. Onneksi Core Data on kehittynyt dramaattisesti vuosien varrella, ja kehys on ottanut käyttöön erilaisia ratkaisuja, joiden avulla Core Datan kanssa työskentely monisäikeisessä ympäristössä on turvallisempaa ja helpompaa.
Sovelluksille, joiden on hallittava monimutkaista objektigraafia, Core Data sopii erinomaisesti. Jos sinun on tallennettava vain kourallinen toisiinsa liittymättömiä objekteja, sinun on ehkä parempi käyttää kevyttä ratkaisua tai käyttäjän oletusjärjestelmää.
Exploring the Core Data Stack
Nyt kun tiedät, mitä Core Data on ja mitä se ei ole, on aika tutustua tarkemmin kehyksen rakennuspalikoihin. On tärkeää, että ymmärrät, miten eri luokat, joiden avulla kehys toimii, pelaavat yhteen.
Kehyksen tähdet ovat:
- Hallittu oliomalli
- Hallittu oliokonteksti
- ja pysyvän tallennuspaikan koordinaattori
Tämässä kaaviossa näytetään, miten nämä luokat liittyvät toisiinsa. Aloitetaan hallitusta oliomallista.
Hallittu oliomalli
Hallittu oliomalli on NSManagedObjectModel
-luokan instanssi. Vaikka tyypillisessä Core Data -sovelluksessa on yksi NSManagedObjectModel
-luokan instanssi, niitä voi olla useita. Hallittu objektimallin instanssi edustaa Core Data -sovelluksen tietomallia.
Yllä olevasta kaaviosta nähdään, että hallittu objektimalli on yhteydessä tietomalliin. Tietomallia edustaa sovelluspaketissa oleva tiedosto, joka sisältää sovelluksen tietoskeeman. Tietoskeema ei ole muuta kuin kokoelma entiteettejä.
Entiteetillä voi olla attribuutteja ja suhteita, jotka muodostavat sovelluksen tietomallin. Muista toistaiseksi, että hallittu oliomalli instanssi on NSManagedObjectModel
-luokkaa ja että se edustaa Core Data -sovelluksen tietomallia.
Hallittu oliokonteksti
Hallittua oliokontekstia edustaa NSManagedObjectContext
-luokan instanssi. Core Data -sovelluksella on yksi tai useampi hallittu objektikonteksti, joista kukin hallitsee kokoelmaa malliobjekteja, NSManagedObject
-luokan instansseja.
Aiemmin tarkastelemamme kaavio havainnollistaa, että hallittu objektikonteksti vastaanottaa malliobjekteja pysyvän tallennuskoordinaattorin kautta. Se säilyttää viittauksen sovelluksen pysyvän varaston koordinaattoriin.
Hallittu objektikonteksti on se objekti, jonka kanssa ollaan eniten vuorovaikutuksessa. Se luo, lukee, päivittää ja poistaa malliobjekteja. Kehittäjän näkökulmasta NSManagedObjectContext
-luokka on Core Data -kehyksen työjuhta.
Pysyvän tallennuspaikan koordinaattori
Pysyvän tallennuspaikan koordinaattoria edustaa NSPersistentStoreCoordinator
-luokan instanssi, ja sillä on keskeinen rooli jokaisessa Core Data -sovelluksessa. Vaikka persistent store -koordinaattoreita voi olla useita, useimmissa sovelluksissa on vain yksi. Hyvin, hyvin harvoin sovelluksessa on tarvetta useammalle pysyvän tallennuspaikan koordinaattorille.
Pysyvän tallennuspaikan koordinaattori pitää viittausta hallittujen objektien malliin ja jokainen vanhemman hallittujen objektien konteksti pitää viittausta pysyvän tallennuspaikan koordinaattoriin. Älä huolehdi vanhemmista ja lapsista hallituista objektikonteksteista toistaiseksi.
Yllä olevasta kaaviosta näemme, että pysyvän säilön koordinaattori on yhteydessä yhteen tai useampaan pysyvään säilöön. Näin pääsemme pysyvään varastoon.
Pysyvä varasto
Muista, että Core Data hallinnoi objektigraafia. Kehys on hyödyllinen vain, jos persistent store -koordinaattori on yhteydessä yhteen tai useampaan persistent storeen. Valmiiksi Core Data tukee kolmea pysyvää tallennustyyppiä:
- SQLite-tietokanta
- binäärinen tallennustyyppi
– muistissa oleva tallennustyyppi
Kullakin pysyvän tallennustyypillä on hyvät ja huonot puolensa. Useimmat sovellukset käyttävät SQLite-tietokantaa pysyvänä varastona. Kuten aiemmin mainitsin, SQLite on kevyt ja erittäin nopea. Se sopii erinomaisesti mobiili- ja työpöytäsovelluksiin.
Miten ydintietopino toimii
Nyt kun tiedät, mistä ydintietopino koostuu, on aika tutkia, miten se toimii sovelluksessa. Core Data -sovelluksen sydän on pysyvän tallennuksen koordinaattori. Pysyvän tallennuspaikan koordinaattori instantioidaan ensimmäisenä, kun Core Data -pino luodaan.
Mutta pysyvän tallennuspaikan koordinaattorin luomiseen tarvitaan hallittu oliomalli. Miksi näin on? Pysyvän tallennuspaikan koordinaattorin on tiedettävä, miltä sovelluksen tietoskeema näyttää.
Kun pysyvän tallennuspaikan koordinaattori ja hallittu oliomalli on perustettu, alustetaan Core Data -pinon työjuhta, hallittu oliokonteksti. Muista, että hallittu objektikonteksti säilyttää viittauksen pysyvän säilön koordinaattoriin.
Kun Core Data -pino on perustettu, sovellus on valmis käyttämään Core Dataa vuorovaikutuksessa sovelluksen pysyvän säilön kanssa. Useimmissa tapauksissa sovellus on vuorovaikutuksessa pysyvän säilön koordinaattorin kanssa hallitun objektikontekstin kautta.
Sovellus on harvoin, jos koskaan, suoraan vuorovaikutuksessa pysyvän säilön koordinaattorin tai hallitun objektimallin kanssa. Kuten aiemmin mainitsin, NSManagedObjectContext
-luokka on luokka, jonka kanssa olet eniten vuorovaikutuksessa.
Hallitun objektin kontekstia käytetään tietueiden luomiseen, lukemiseen, päivittämiseen ja poistamiseen. Kun hallitun objektin kontekstissa tehdyt muutokset tallennetaan, hallitun objektin konteksti työntää ne pysyvän säilön koordinaattoriin, joka lähettää muutokset vastaavaan pysyvään säilöön.
Jos sovelluksessasi on useita pysyviä tallennuspaikkoja, pysyvän tallennuspaikan koordinaattori selvittää, minkä pysyvän tallennuspaikan on tallennettava hallittavan objektikontekstin muutokset.
Yhdessä pähkinänkuoressa
Tietääksesi nyt Core Data -kehyksen perusteet. Olet jo edellä, koska useimmat kehittäjät ohittavat tämän vaiheen. Seuraava askel, joka sinun on otettava, on alkaa käyttää kehystä. Jos tarvitset apua, suosittelen tutustumaan Mastering Core Data With Swift -oppaaseen.
The Missing Manual
for Swift Development
The Guide I Wish I Have I had When I Started Out
Join 20,000+ Developers Learning About Swift Development
Lataa ilmainen kopiosi