CoreData vs Realm (í Swift)

Eftir að hafa skipt úr CoreData yfir í Realm, hélt ég að það væri gagnlegt að taka fram lykilmuninn.

Í fyrsta lagi er ég ekki að nota skýjaðgerðir Realm og mun líklega nota iCloud til að samstilla gögn. Ég er að velja ókeypis þjónustu og Realm er frjálst að nota ef þú þarft ekki að samstilla um skýpallinn þeirra.

Bæði CoreData og Realm nota flokkana sem byggja á Objekt-C til að koma á raunverulegum hlutum sem eru studdir af einhvers konar verslun. CoreData notar sjálfgefið sqllite gagnagrunn þannig að þú þarft nokkur sqllite verkfæri til að skoða og breyta gagnagrunninum handvirkt. Realm notar sér snið en þeir hafa vafra ókeypis í Mac App Store til að skoða og breyta gagnagrunninum.

Úr kassanum er miklu auðveldara að ná höfðinu en CoreData. CoreData stýrir hlutum beinlínis í ManagedObjectContext sem þú verður að vista til að viðhalda öllum breytingum á meðan Realm er viðvarandi allar breytingar strax innan skrifa reitanna. Til að nota CoreData þarftu djúpan skilning á API sem dreifist yfir fjölda tengdra flokka. Þú getur næstum hoppað beint inn með Realm. Stóri yfirburði sem ég hef fundið er að vegna þess að breytingar á Realm eru viðvarandi strax, ef forritið þitt hrynur eða þú hættir herminum, geturðu skoðað gagnagrunninn til að sjá hvernig hann lítur út. Notkun CoreData, einfaldlega að stöðva keppinautann án þess að vista samhengið fyrst, þýðir að þú tapar gagnagrunni á þeim tímapunkti. Þetta dugar næstum því ein og sér til að ég haldi mig við Realm. Það gæti verið minna duglegt og þú gætir bara vistað samhengi við hverja breytingu á CoreData en það líður eins og þú sért að vinna gegn API þegar þú byrjar að gera hluti eins og þessa. Það er þess virði að muna að Realm-blokkir þegar skrifað er og aðgangur mun valda undantekningu á þráðum ef ekki er keyrt á aðalþráðinn.

Að búa til skema er líka frábrugðið, með CoreData er smíðað líkan í XCode sem býr til þá flokka sem notaðir eru til að setja gögnin upp í hluti. Aftur, Realm er einfaldara að því leyti að þú verður bara að erfa frá Object og merkja eiginleika sem þú vilt geyma sem @objc dynamic. Það er fjöldi aðgerða sem þú getur hnekkt til að hjálpa til við að aðlaga hvernig hlutirnir þínir eru viðvarandi o.s.frv. Mér líkar við sjónræna framsetningu líkansins í XCode og það er að öllum líkindum auðveldara að vinna með einum til mörgum og mörgum til mörgum samböndum við XCode módel ritstjóri en það er að nota LinkingObjects () virkni í Realm.

Ég hugsa um Realm bekk sem skilgreining á töflu og þú getur auðveldlega fengið lifandi niðurstöðu sett með því að hringja í realm.objects (MyObject.self) sem heldur áfram að skjóta þegar línum er bætt við, eytt eða uppfært. Þú getur bætt predikum við niðurstöðurnar sem eru settar þannig að þú fáir fyrirfram síaðar og flokkaðar niðurstöður eða þú getur kortlagt þær í fylki. Í CoreData er hægt að gera svipaða hluti en aftur er API í Realm einfaldara.

CoreData gerir þér kleift að stilla hvernig á að takast á við núlltilvísanir sem eru handhægar ef þú vilt að eyðingar falli niður og skili ekki gagnagrunninn fullan af nils eða tilvísunum í hluti sem eru ekki lengur til. Þetta á víst að koma í nýrri útgáfu en þangað til hef ég skrifað Cascading Deletion API fyrir Realm sem ég mun birta á sínum tíma.

Að lokum, eftir að hafa gengið í gegnum erfiða ígræðslu til að læra nóg um CoreData til að nota það, var ég treg til að skipta yfir í allt annað en tiltölulega einfaldleika Realm og þá staðreynd að það er bara svona aðeins vinalegra þegar ítrekað er hleypt af stokkunum og hætt við hermirinn þýðir að ég myndi mæla með því að nota Realm yfir CoreData.