„CoreData vs Realm“ („Swift“)

Perjungęs iš „CoreData“ į „Realm“, pamaniau, kad būtų naudinga atkreipti dėmesį į pagrindinius skirtumus.

Pirma, aš nenaudoju „Realm“ debesies funkcijų ir tikriausiai naudosiu „iCloud“ duomenims sinchronizuoti. Aš renkuosi nemokamas paslaugas, o „Realm“ gali laisvai naudotis, jei nereikia sinchronizuoti per jų debesų platformą.

Tiek „CoreData“, tiek „Realm“ naudoja „Objective-C“ klases, kad realizuotų realius objektus, kuriuos palaiko kažkokia parduotuvė. „CoreData“ pagal numatytuosius nustatymus naudoja „sqllite“ duomenų bazę, todėl jums reikės kai kurių „sqllite“ įrankių, kad galėtumėte ranka peržiūrėti ir redaguoti duomenų bazę. „Realm“ naudoja patentuotą formatą, tačiau „Mac App Store“ turi nemokamą naršyklę, kad galėtų peržiūrėti ir redaguoti duomenų bazę.

„Real-box“ yra žymiai lengviau nei „CoreData“. „CoreData“ tiesiogiai valdo objektus „ManagedObjectContext“, kurį turite išsaugoti, kad išliktumėte pakeitimų, o „Realm“ visus pakeitimus iš karto išlieka rašymo blokuose. Norėdami naudoti „CoreData“, turite gerai išmanyti API, kuri yra paskirstyta daugelyje susijusių klasių. Su „Realm“ galite beveik įšokti tiesiai. Pagrindinis mano atrastas pranašumas yra tas, kad dėl „Realm“ pokyčių išliekama nedelsiant, jei jūsų programa sugenda arba jūs uždarote treniruoklį, galite patikrinti duomenų bazę, kad pamatytumėte, kaip ji atrodo. Naudojant „CoreData“, tiesiog sustabdžius emuliatorių, neišsaugojus konteksto, reiškia, kad tuo metu prarasite duomenų bazės būseną. To beveik pakanka, kad priverstų mane prisiliesti prie „Realm“. Tai gali būti ne tokia efektyvu ir jūs galite tiesiog išsaugoti kontekstą atlikdami kiekvieną „CoreData“ pakeitimą, tačiau manote, kad pradėję daryti tokius veiksmus, jūs dirbate su API. Verta atsiminti, kad „Realm“ blokuoja rašant ir prieigai sukeliant gijos išimtį, jei ji nebus vykdoma pagrindiniame gijoje.

Sukurti schemą taip pat skiriasi, naudodami „CoreData“ XCode sukuriate modelį, kuris sugeneruoja klases, naudojamas duomenims integruoti į objektus. „Realm“ yra paprastesnė tuo, kad jūs tiesiog turite paveldėti iš objekto ir pažymėti savybes, kurias norite išsaugoti kaip @objc dinaminę. Yra keletas funkcijų, kurių galite nepaisyti, kad būtų lengviau pritaikyti jūsų objektų išlikimo būdus ir tt Man patinka vizualus modelio pakartojimas „XCode“ ir, be abejo, lengviau dirbti palaikant ryšius „vienas su daugeliu“ ir „daug nuo daugelio“. „XCode“ modelio redaktorius, nei naudoti „LinkingObjects ()“ funkciją „Realm“.

Manau, kad „Realm“ klasė yra lentelės apibrėžimas, ir jūs galite lengvai gauti tiesioginį rezultatą, paskambinę į realm.objects („MyObject.self“), kuris ir toliau suaktyvės, kai eilutės bus pridedamos, ištrintos ar atnaujintos. Prie rezultatų rinkinio galite pridėti predikatus, kad gautumėte iš anksto filtruotus ir surūšiuotus rezultatus arba galėtumėte juos susieti su masyvu. „CoreData“ galite atlikti panašius veiksmus, bet vėlgi, „Realm“ API yra paprastesnė.

„CoreData“ leidžia nustatyti, kaip elgtis su nulinėmis nuorodomis. Tai yra patogu, jei norite, kad ištrynimai būtų kaskadiniai, o ne palikdami duomenų bazę pilną nulių ar nuorodų į objektus, kurių nebeegzistuoja. Manoma, kad tai bus išleista nauja versija, tačiau iki tol aš parašiau „Cascading Deletion“ API sritį, kurią paskelbsiu tinkamu laiku.

Apibendrinant reikia pasakyti, kad patyręs pakankamai sunkių žinių apie „CoreData“, kad norėčiau ja naudotis, aš nenorėjau pereiti prie nieko kito, išskyrus santykinį Sferos paprastumą ir tai, kad ji yra tiesiog šiek tiek draugiškesnė pakartotinai paleidžiant ir uždarant treniruoklį. reiškia, kad aš rekomenduočiau naudoti „Realm“ per „CoreData“.