CoreData супраць Realm (у Swift)

Перайшоўшы з CoreData на Realm, я падумаў, што будзе карысна адзначыць ключавыя адрозненні.

Па-першае, я не выкарыстоўваю воблачныя функцыі Realm і, верагодна, буду выкарыстоўваць iCloud для сінхранізацыі дадзеных. Я выбіраю бясплатныя паслугі, і Realm можа карыстацца, калі вам не трэба сінхранізаваць праз іх хмарную платформу.

І CoreData, і Realm выкарыстоўваюць класы, заснаваныя на Objective-C, для стварэння рэальных аб'ектаў, якія падтрымліваюцца нейкім сховішчам. CoreData па змаўчанні выкарыстоўвае базу дадзеных sqllite, таму для прагляду і рэдагавання базы дадзеных уручную вам спатрэбяцца некаторыя інструменты sqllite. Realm выкарыстоўвае фірменны фармат, але ў Mac App Store бясплатна даступны браўзэр для прагляду і рэдагавання базы дадзеных.

З-пад скрыні Realm значна прасцей узяць галаву, чым CoreData. CoreData кіруе аб'ектамі відавочна ў ManagedObjectContext, які трэба захаваць, каб захаваць любыя змены, у той час як Realm захоўвае ўсе змены адразу ў блоках запісу. Каб выкарыстоўваць CoreData, вам неабходна глыбокае разуменне API, які распаўсюджваецца на шэраг звязаных класаў. Вы можаце амаль ускочыць з Realm. Асноўная перавага, якую я знайшоў, заключаецца ў тым, што, паколькі змены ў Realm захоўваюцца неадкладна, калі ваша прыкладанне выходзіць з ладу альбо вы пакідаеце сімулятар, вы можаце прааналізаваць базу дадзеных, каб даведацца, як яна выглядае. Выкарыстоўваючы CoreData, проста спыніўшы эмулятар, не захоўваючы кантэкст, значыць, вы страціце стан базы дадзеных у гэты момант. Гэтага амаль само па сабе, каб прымусіць мяне прытрымлівацца Царства. Гэта можа быць менш эфектыўна, і вы можаце проста захаваць кантэкст пры кожнай змене ў CoreData, але здаецца, што вы працуеце супраць API, калі пачынаеце рабіць такія рэчы. Варта памятаць, што блокі Realm пры запісе і доступе выклічуць выключэнне паток, калі не будзе выканана на галоўнай нітцы.

Стварэнне схемы таксама адрозніваецца, з дапамогай CoreData вы будуеце мадэль у XCode, якая генеруе класы, якія выкарыстоўваюцца для instatntiate дадзеных у аб'екты. Зноў жа, Realm прасцей у тым, што вам проста трэба ўспадкаваць аб'екты і адзначыць уласцівасці, якія вы хочаце захаваць як дынаміку @objc. Ёсць некалькі функцый, якія вы можаце адмяніць, каб дапамагчы наладзіць спосаб захоўвання аб'ектаў і г.д. Мне падабаецца візуальная рэпрэзентацыя мадэлі ў XCode, і, магчыма, прасцей працаваць у адносінах адзін-шмат-колькі і шмат хто Рэдактар ​​мадэлі XCode, чым выкарыстоўваць функцыю LinkingObjects () у Realm.

Я думаю пра клас Realm як табліцу вызначэння, і вы можаце лёгка атрымаць набор вынікаў у жывым эфіры, патэлефанаваўшы realm.objects (MyObject.self), які будзе працягвацца, бо радкі дадаюцца, выдаляюцца або абнаўляюцца. Вы можаце дадаць выказнікі да набору вынікаў, каб вы атрымалі папярэдне адфільтраваныя і сартаваныя вынікі, альбо вы маглі адлюстраваць іх у масіве. У CoreData вы можаце рабіць падобныя рэчы, але зноў API ў Realm прасцей.

CoreData дазваляе вызначыць, як змагацца з нулявымі спасылкамі, што зручна, калі вы хочаце выдаліць каскад, а не пакідаць базу дадзеных поўнай нулявых спасылак альбо спасылак на аб'екты, якія ўжо не існуюць. Гэта павінна выйсці ў новым выпуску, але да гэтага часу я напісаў каскаднае выдаленне API для Realm, якое я апублікую з часам.

Напрыканцы, правёўшы цяжкае навучанне, каб даведацца пра CoreData для яго выкарыстання, я неахвотна пераходзіў на што-небудзь іншае, акрамя адноснай прастаты Realm і таго, што якраз гэта больш прыязна пры шматкроць запуску і выхадзе з трэнажора. азначае, што я рэкамендаваў бы выкарыстоўваць Realm над CoreData.