CoreData vs oblast (v Swift)

Po přechodu z CoreData na Realm jsem si myslel, že by bylo užitečné zaznamenat klíčové rozdíly.

Nejprve nepoužívám cloudové funkce Realmu a pravděpodobně k synchronizaci dat použiji iCloud. Vybírám bezplatné služby a Realm je zdarma, pokud nepotřebujete synchronizaci prostřednictvím cloudové platformy.

CoreData i Realm používají třídy založené na Objective-C k vytvoření instance skutečných objektů, které jsou podporovány nějakým druhem úložiště. CoreData standardně používá databázi sqllite, takže pro ruční prohlížení a úpravy databáze budete potřebovat nějaké nástroje sqllite. Realm používá proprietární formát, ale má k dispozici bezplatný prohlížeč v Mac App Store pro prohlížení a editaci databáze.

Z krabice je Realm mnohem snazší obejít hlavu než CoreData. CoreData spravuje objekty explicitně v ManagedObjectContext, které musíte uložit, aby přetrvávaly jakékoli změny, zatímco Realm přetrvává všechny změny okamžitě v rámci bloků zápisu. Abyste mohli používat CoreData, potřebujete důkladné porozumění API, které je rozšířeno do několika souvisejících tříd. S Realm můžete téměř skočit rovně. Velkou výhodou, kterou jsem zjistil, je to, že protože změny Realmu přetrvávají okamžitě, pokud dojde k chybě aplikace nebo ukončíte simulátor, můžete si prohlédnout databázi a podívat se, jak to vypadá. Pomocí CoreData jednoduše zastavíte emulátor, aniž byste nejprve uložili kontext, což znamená, že v tomto bodě ztratíte stav databáze. To je samo o sobě dost, abych se držel Realm. Může to být méně efektivní a při každé změně CoreData byste mohli ušetřit kontext, ale zdá se, že pracujete proti API, když začnete dělat takové věci. Je třeba si uvědomit, že bloky Realm při zápisu a přístupu způsobí výjimku vlákna, pokud nebudou provedeny v hlavním vlákně.

Vytvoření schématu se také liší, pomocí CoreData vytvoříte model v XCode, který generuje třídy používané k instatntaci dat do objektů. Realm je opět jednodušší v tom, že musíte zdědit vlastnosti Object a označit, které chcete uložit jako dynamiku @objc. Existuje řada funkcí, které můžete přepsat, aby vám pomohly přizpůsobit způsob, jakým vaše objekty přetrvávají atd. Líbí se mi vizuální repesentace modelu v XCode a je zjevně snazší pracovat s individuálními a mnohočetnými vztahy s editor modelů XCode, než je použití funkce LinkingObjects () v Realmu.

Třídu Realm považuji za definici tabulky a můžete snadno získat sadu výsledků naživo voláním realm.objects (MyObject.self), která se bude i nadále střílet, jak budou řádky přidávány, mazány nebo aktualizovány. Do sady výsledků můžete přidat predikáty, abyste získali předfiltrované a tříděné výsledky nebo je mohli mapovat do pole. V CoreData můžete dělat podobné věci, ale API v Realmu je opět jednodušší.

CoreData vám umožňuje nastavit, jak se vypořádat s nulovými odkazy, což je užitečné, pokud chcete mazání kaskády a nenechávat databázi plnou nilů nebo odkazů na objekty, které již neexistují. Předpokládá se, že to bude v nové verzi, ale do té doby jsem napsal API kaskádového odstranění pro Realm, které včas zveřejním.

Na závěr, když jsem prošel dost tvrdým štěpem učení o CoreData, abych ho mohl použít, nechtěl jsem přejít na cokoli jiného, ​​než na relativní jednoduchost říše a skutečnost, že je to jen o něco přátelštější při opakovaném spuštění a ukončení simulátoru. znamená, že bych doporučil používat Realm přes CoreData.