Saturday, October 8, 2016

Core Data Sqlite Vs Binary Options

As die blob lêers van 'n sqlite is serialized, wat kan beteken dat serialisasie is die beste om die kleinste stukke van binêre data te bekom. Sowel jy kan NSCoding vir conditionalObjectEncodings, wat die duplisering van in-geheue lewendig voorwerp gevalle verwyder gebruik. Die rede i39m hierdie vraag vra, is omdat almal praat en stel Coredata-SQLite, maar i39m nie aangesien voordeel Tensy bou teen 'n groot data bron, en jy can39t alles wat in die geheue sit. Het ek gelyk uitvoering maak LolaRun 5 Maart 12 by 18:12 Daar is altyd 'n balans te vind tussen geheue en verbetering van die prestasie. Met NSCoding, of jou persoonlike binêre voorstelling het jy baie meer beheer oor die stukkies wat geskryf is om die berging of gestoor word in die geheue, maar vir dit wat jy het om die prys te betaal van kodering meer so sê die doeltreffendheid van die kode sal afhang van jou vermoëns. Met CoreData / sQLite 'n baie nuttige dinge geïmplementeer vir jou op 'n doeltreffende manier (soek, bevraagteken, kruip, sluit, ens). Let wel: CoreData voorwerpe in die geheue net wanneer dit nodig is gelaai, anders bly hulle in die DB. â € MrTJ 6 Maart 12 by 08:26 Uitstekende. So as i39m behulp quotApplicationDocumentquot sjabloon van aansoeke, en as ek nodig het om te red en oop dokumente, ek wouldn39t regtig nodig die voordele van CoreData, want ek moet alles in die geheue te laai, en don39t moet navraag en. databasis funksies. Die groot verskil is die ontwikkeling koste. Wat in my geval is nie 'n terugslag. Baie dankie. I39ll wag 'n bietjie, meer antwoorde en meer besprekings te lok, voordat 'n antwoord uitvoering maak LolaRun 6 Maart 12 aanvaarding by 13:41 Theres altyd 'n impedansie tussen voorwerpe en relasionele strukture. Ek het altyd verkies voorwerpe sedert toegang data is tipies 'n fraksie van funksies in jou app. Met NSCoding, kry jy eenvoud, gemak van ontfouting, en beheer met baie min kode vir anyways skryf. Jy het ook die buigsaamheid om NSCoding neem in jou databasis strukture. NSCoding is 'n volharding meganisme vir die stoor van voorwerpe. As jy indekse by jou verhoudings strukture vir die soektog optimalisering en in stand te hou voorwerp strukture, dan dink ek dat jy die beste van alle wêrelde te kry op 'n baie lae koste en die gemak van die onderhoud. antwoord 14 Augustus 13 aan 20: 19Using Core Data in Swift Video transkripsie hieronder deur ryk. Gebied Swift is 'n plaasvervanger vir SQLite Core Data geskryf vir Swift Core Data is 'n raamwerk van groot krag, maar dit kom dikwels met groot frustrasie. Tog bly dit 'n gewilde keuse vir baie IOS ontwikkelaars. Swift is 'n taal van groot krag, maar dit beloof gemak en eenvoud. Die kombinasie van die twee, kan ons gebruik Swift om die krag van Core Data benut, sonder die frustrasie In hierdie praatjie Isai Squires loop ons deur sy poging, en die nuwe frustrasies hy langs die pad. Die aanbieding van praktiese strategieë vir diegene weg te beweeg van 'n doelwit-C-model, en die besonderhede wat hy die foute en kompleksiteit sal jy waarskynlik ontmoeting, hoe om te werk rondom hulle, en hoe Swift kan nuwe orde te bring om jou model voorwerpe. Ons mense moet ook leer hoe om Swift spesifieke funksies, soos enums inspan, in jou NSManagedObject subklasse. Om die kode wat in hierdie gesprek wat jy kan besoek Jesses GitHub te sien. Wat is Core Data (00:10) Die Core Data raamwerk bied algemene en outomatiese oplossings vir algemene take wat verband hou met voorwerp lewensiklus en grafiek voorwerp bestuur, insluitend volharding. - Core Data program gids Core Data is 'n Apple raamwerk wat voorwerp lewensiklus bestuur, voorwerp grafiek bestuur en volharding bied. Sy gerugsteun deur SQLite, maar dit is nie 'n relasionele databasis. Afhangende van jou gebruik geval, Core Data mag of mag nie die regte oplossing vir jou wees. Sommige van Core Datas voor - sluit in die feit dat dit hou die verhoudings tussen jou voorwerpe in harmonie. Die Core Data stapel (03:12) Op die boonste vlak, ons het die bestuur voorwerp konteks waarbinne jy voorwerpe te skep. Dit is baie soortgelyk aan NSManagedObject. maar hulle het ekstra gedrag en eienskappe wat spesifiek op Core Data. Jy skep die voorwerpe en die konteks besit wat is waar jy manipuleer of hierdie voorwerpe verander, maak jy jou verhoudings, en die voorwerpe deur die konteks voortduur deur hulle spaar. Die volgende stap is in die winkel koördineerder, wat 'n versameling van winkels bestuur. In die meeste gevalle kan jy eintlik net een winkel gerugsteun deur SQLite, maar daar is verskillende tipes. Een van hierdie tipe is 'n in-geheue stoor, waar jy Core Data heeltemal kan gebruik in-geheue sonder om bekommerd te wees oor volharding. Onder dit is die permanente stoor, verteenwoordig deur 'n NSPersistentStore voorwerp. Dit verteenwoordig die werklike winkel on-skyf, net soos die beeld 'n UI die beeld sou verteenwoordig op die skyf of 'n NS bundel sal die bondel op die skyf verteenwoordig. Die meeste van die tyd was net besig met die konteks en bestuur voorwerpe ons nie regtig bekommerd oor die res van die stapel wanneer ons dit stel, vir die meeste gebruik gevalle. Hoekom gebruik Core Data Hoekom Swift (05:26) Core Data bied jou met eienskappe wat jy nodig het. In die woorde van Apple, dit is volwasse, eenheid getoets, en optimale. Dit is ook deel van die IOS en OS X tool chain, so dit is gebou in die platforms. Die gebruik van Core Data is 'n goeie manier om derde party afhanklikhede te verminder, want dit het integrasie met Xcode. Apple gaan ook voort om te belê in dit swaar is in die vorige jaar by WWDC daar gesprekke oor die nuwe funksies in Core Data is, en so Theres nie ondersteuning langtermyn vir hierdie raamwerk. Dit is ook redelik gewild, en dus is daar ton van hulpbronne aanlyn. Maar daardie hulpbronne is meestal in Objective-C, so hoekom gebruik Swift Swift kan duidelikheid te bring aan ons kode, sodat dit makliker in 'n paar maniere om Core Data gebruik. Ons kan 'n soort-veiligheid te kry en Swift net-funksies soos enums en-opsies. Daarbenewens kan ons funksionele paradigmas in Swift dat ons kan nie gebruik in Objective-C gebruik. Swift Core Data (08:08) 'n waarskuwing oor Swift: die gereedskap is nog onvolwasse. In die algemeen is die gereedskap om Xcode en Swift is 'n bietjie onstabiel, en al was dit die verbetering van al die tyd, kan dit frustrerend wees. Die Core Data stapel (08:43) Die eerste stap is die oprigting van die Core Data stapel. In die diagramme vroeër gesien het, wil ons al die verskillende stukke omsluit in 'n paar voorwerpe wat ons kan onthou. Dit is basies dieselfde boiler kode soos in Objective-C, maar meer aangenaam. Ons begin met ons Core Data model, wat 'n struct so waardegebaseerde. Daar is 'n naam en 'n bondel, asook ander eienskappe en metodes om die hantering van die model makliker. Daarna is die stapel, wat die model sal ontvang wanneer ons inisialiseer nie. Die initializer sal opgestel hierdie drie eienskappe. Vir die storeType, kan ons standaard waardes te voorsien, soos 'n binêre data stoor, SQLite winkel, of 'n in-geheue stoor. Ons kan dieselfde doen vir concurrency, en spesifiseer die belangrikste tou as die standaard tipe hier in Swift. Later, as ons wou eenheid toets of skep 'n ander stapel, kan ons inisialiseer met verskillende winkels of private toue. Moenie dit in die app afgevaardigde stel Die Xcode templates al hierdie boiler in die jeug afgevaardigde in 'n manier wat nie herbruikbare in ander dele van jou jeug. Dit skep afhanklikhede wat jy nie wil, en die kode is dan weggesluit in die jeug afgevaardigde waar dit nooit regtig moet in elk geval. Langs die lyne, gebruik raamwerke. Met IOS 8 en veral Swift, kan ons nou maak Cacao Touch raamwerke in plaas van die gebruik van statiese biblioteke soos ons gewoond is. Die skep van managed voorwerpe (15:27) Xcode sal klasse vir jou, wat nooit die groot gewees genereer. In Swift, theyre erger. mogenerator is 'n derde party biblioteek wat 'n klomp mense gebruik vir Objective-C, maar dit is nog steeds in eksperimentele stadiums vir Swift met sy laaste release op GitHub van September 2014. Dit weer doen, dit verwys terug na die gereedskap kwessie waar sommige van die gereedskap is nog 'n bietjie onvolwasse. Wanneer jy jou voorwerpe te skep, moet jy hierdie visuele redakteur en jy kan hul eiendomme en hul verhoudings te skep. Ons kan ook kenmerk validering, of persoonlike reëls en beperkings op ons data. Ons kan dinge opsionele maak of te verskaf minimum / maksimum waardes, en al hierdie dinge bekragtig wanneer jy red. Die volgende blok vergelyk die tipiese Objective-C gegenereer deur Xcode en 'n vergelykbare Swift klas. In die Objective-C-kode, ons het die werknemer voorwerp en al sy eienskappe. Maar kan nie ons vertel wat van hulle opsionele is in Core Data in jou model lêer of indien enige van hulle het verstekwaardes. Die analoog Swift klas is baie skoner danksy skoner sintaksis. Optionals voorsiening te maak vir die afwesigheid van 'n waarde, en is gekenmerk deur die vraagteken. Swift waarborg dat enigiets wat opsioneel isnt gemerk kan nie nul wees. NSManaged in Swift het 'n soortgelyke funksie om dinamiese in Objective-C. Dit lig basies die samesteller dat die stoor en implementering van hierdie eienskappe word tydens looptyd. obj-c // Objective-C koppelvlak Werknemer: NSManagedObject eiendom (nonatomic, behou) NSString adres eiendom (nonatomic, behou) NSDate dateOfBirth eiendom (nonatomic, behou) NSString e-pos eiendom (nonatomic, behou) NSString naam eiendom (nonatomic, behou) NSDecimalNumber salaris eiendom (nonatomic, behou) NSNumber status Nog 'n goeie ding is dat Swift klasse namespaced deur die module waarin hulle is. dit beteken dat ons ons klasse voorvoegsel met die naam module. Xcode nie dit vir jou doen, sodat jy moet dit met die hand te doen na die opwekking van klasse. Geen voorvoegsel sal runtime ongelukke en ander obskure foute kan veroorsaak. Instantiëren managed voorwerpe (22:07) Ja, ons wil hierdie voorwerpe in ons kode. Daar is 'n paar boiler rondom inisialisering 'n bestuurde voorwerp, en daarom het ons 'n NSEntityDescription klas wat die entiteite in Core Data verteenwoordig. Hierdie entiteit beskrywings is die wyse waarop jy voorwerpe in Core Data, wat 'n clunky en ongemaklike proses kan wees voeg. Om werklik te kry 'n geval van ons klas, skryf ons 'n helper funksie om die naam te kry en sit dit in konteks. obj-c // Persoon NSString naam Persoon entityName implementering NSManagedObject (Helpers) (NSString) entityName terugkeer NSStringFromClass (self klas) einde // Skep nuwe persoon uitreik persoon uitreik insertNewObjectInContext: konteks implementering NSManagedObject (Helpers) (instancetype) insertNewObjectInContext: (NSManagedObjectContext) konteks terugkeer NSEntityDescription insertNewObjectForEntityForName: self entityName inManagedObjectContext: konteks Swift, ons het om die doelwit-C runtime getClass funksie, wat die volle gekwalifiseerde naam van MyApp. Person terugkeer gebruik. Maar in Core Data, jou doel is net Persoon genoem. so ons het 'n paar ontleding te doen. Ons skep die EntityDescription met 'n naam, sit dit in die konteks, en dan bel die NW Bestuurde Object initializer. Die nadeel hiervan is dat ons om dit te doen vir al ons klasse. Dit is nie baie Swift-agtige wat weve gedoen is basies net Objective-C met 'n nuwe sintaksis, wat nie werklik ons ​​doel. Ons wil Swifts funksies te gebruik en te bedryf in die Swift ingesteldheid. Die Doel-C manier is nie altyd die Swift manier omhels Swift Initializers (27:53) Die eerste stap om die aanvaarding van Swift is die skep van 'n werklike aangewese initializer vir hierdie voorwerpe. Alle eiendomme om 'n aanvanklike waarde toegeskryf word, en die aangewese initializer moet hulle ten volle init. Gerief initializers is sekondêre en moet die aangewese initializer noem. Superklas initializers is nie in subklasse geërf by verstek. Dan, vir NSManagedObject. ons het dit vir die werklike aangewese initializer. Maar Core Data verbypaaie inisialisering reëls as gevolg van NSManaged. Swift nie die geval is weet hoe om te gaan met eienskappe wat Arent geïnisialiseer want hulle is verskaf tydens looptyd. In plaas daarvan, kan ons 'n werklike initializer dat elkeen van daardie parameters neem voeg en 'n afhanklikheid inspuiting, waar ons elkeen van daardie waardes. Typealias (30:52) Die eerste Swift-spesifieke eienskap wat ons kan gebruik is typealias. Dit is eintlik baie eenvoudig en nie spesifiek vir Core Data, sodat jy dit kan gebruik in ander dele van jou jeug. In hierdie voorbeeld typealias ons 'n string te EmployeeId. sodat ons die hele kode in plaas van string kan verwys na 'n tipe EmployeeId. Met 'n typealias, kan ons dit duidelik maak wat die string verteenwoordig, en gebruik die naam as 'n werklike tipe. Verhoudings (31:40) In Swift 1.2, het ons moedertaal stel tipes. Theyre waarde-gebaseerde, generiese, en beter as NSSet. of 'n stel van enige voorwerp. Wanneer jy verhoudings tussen voorwerpe, soos een-tot-baie, jy sal 'n stel wat verwys na die voorwerpe het. Ongelukkig stel nie versoenbaar is met Core Data, wat werklik die geval is weet hoe om dié te hanteer. Enums (32:25) Ons kan eintlik gebruik enums in ons daarin geslaag voorwerpe. In hierdie voorbeeld het ons 'n Genre enum vir bands en albums. Ons NSManagedValue kan private gestel en ons eiendom kan publiek. Maar Core Data nie die geval weet enums, so ons het 'n private eiendom vir haal versoeke. In hierdie situasie, ons moet nog die naam waarde gebruik vir die sleutel wanneer ons gaan haal. In sommige van hierdie raamwerke, kan ons werklik voel die bagasie van Objective-C. Funksionele Paradigmas (34:27) Die laaste ding wat is die toevoeging van 'n paar van Swifts funksionele paradigmas met mikro-biblioteke. Chris Eidhof het 'n praatjie oor klein netwerk en hoe jy kan 'n baie te doen met baie min kode in Swift. Spaar (34:42) Om 'n konteks te red, het ons 'n red metode en 'n fout wyser dat 'n Boole waarde terug. Om dit meer Swift maak, skep ons 'n top-vlak funksie genoem behalwe dat die konteks aanvaar. Ons draai dat metode en terug te keer 'n tuple van 'n Boole en 'n fout nie, behalwe, en kyk vir sukses of foute. Op hierdie manier, jy hoef te doen het met die fout wysers. Haal Versoeke (35:23) Want haal versoeke, hier is die huidige manier waarop jy 'n gaan haal versoek saam met hierdie metode van die konteks sou voer. Weereens sien ons hierdie fout wyser, en omdat sy oorbrug van kakao, kry ons die resultate as 'n opsionele verskeidenheid van AnyObject. Dit beteken dat ons moet werp om ons werklike voorwerpe. Om dit te verbeter sodat ons werklik kan oorerf haal versoeke, voeg 'n generiese parameter. Dan kan ons 'n top-vlak, generiese funksie wat 'n tipe T vir die FetchRequest aanvaar het. In werking, sou dit so lyk. Gaan terug na ons musiek analogie, skep ons 'n versoek om 'n band. Ons kan daardie versoek haal, kry die resultate, en gebruik dit dan. Die voorwerpe wat ons kry is getik, en ons kry 'n verskeidenheid van die tipe wat ons verby. As jy regtig waarde Objective-C's dinamika, dan weve eintlik 'n bietjie verlore deur gebruik te maak van Swift. Daar is baie gewild biblioteke soos Mantel dat baie van hierdie ontleding en volharding om Core Data vereenvoudig, maar dit swaar op die Objective-C runtime en sy dinamiese aard. Recap amp QampA (40:29) te hersien, een van ons doelwitte is duidelik. Ons kan dit kry met-opsies, enums, of typealias, asook aangewese initializers, waar ons kan duidelik sien verstek waardes en opsionele waardes vir ons modelle. Met die aangewese initializer, is nie net die skep van 'n voorwerp sonder inisialisering al sy eienskappe. Ons kry hierdie Swift-spesifieke funksies soos enums en-opsies, en ons kry hierdie funksionele aspekte vir die stoor en haal. Daar is 'n baie meer wat ons eintlik kan doen met hierdie. Om 'n raamwerk waar Ive het 'n baie van hierdie te sien, kyk na my GitHub hier. Q: Wanneer sal jy gemaklik met behulp van Swift vir produksie-kode Isai: Daar is 'n baie artikels aanlyn, maar ek havent gebruik Swift in produksie nie. Ek dink Apple is dit baie vinnig verbeter en daar is baie van die voordele aan die gebruik van Swift in produksie. Waarskynlik een van die mees nadelige aspekte wat met behulp van Swift is die gereedskap kwessies, wat 'n tol op jou produktiwiteit het. Sover wat weve wat in hierdie gesprek, ek dink Swift is 'n groot oorwinning, veral met aangewys intializers. V: Is enige van hierdie tegnieke van toepassing op 'n nalatenskap app geskryf in Core Data Sou dit gepas wees om Swift toepassing in hierdie kode basis Isai: Daar isnt regtig 'n rede om jou hele kode basis te verander en gaan deur middel van hierdie drastiese veranderinge. Dit hang af van die situasie wat jy in, en wat julle werklik hoop om te kry uit die verandering, want dit sal 'n baie doen om oor te skakel na Swift uit 'n ou, Objective-C-kode basis met Core Data. Die ander ding is dat 'n groot deel van hierdie eienskappe bespreek hoef brug doelstelling-C. So as jy net oor te skakel oor jou model, youd het kwessies in ander dele van jou kode basis waar jy kan nie toegang tot hierdie dinge. Jy sal moet baie ompaaie te doen om dit te laat werk. Jesse Squires Isai Squires is sagteware ontwikkelaar in San Francisco whos passievol oor mobiele rekenaar, open-source, en cortados. Hy is tans besig met IOS by Instagram. Sy belangstellings sluit sagteware ontwerp patrone en argitektuur, kognitiewe wetenskap en filosofie, animated gifs, en liggaam modification. I is reeds baie vertroud is met relasionele databasisse en gebruik SQLite (en ander databasisse) in die verlede. Maar Core Data het 'n sekere bekoring, so ek oorweeg spandeer 'n geruime tyd om dit te leer vir gebruik in my volgende aansoek. Is daar 'n groot voordeel vir die gebruik van Core Data oor SQLite, of andersom Wat is die voordele / nadele van elke Ek vind dit moeilik om die koste van die leer Core Data regverdig wanneer Apple dit nie die geval vir baie van sy vlagskip programme soos Mail. app of iPhoto. app - in plaas kies vir SQLite databasisse. SQLite is ook op groot skaal op die iPhone. Kan diegene wat vertroud is met die gebruik van beide kommentaar op hul ervaring Miskien, soos met die meeste dinge, die vraag is dieper as net die gebruik van een oor die ander gevra 7 Februarie 09 by 09:05 gesluit as nie konstruktiewe deur casperOne 23 Februarie 12 by 23:25 Soos dit tans staan, hierdie vraag is nie 'n goeie passing vir ons QampA formaat. Ons verwag antwoorde word ondersteun deur feite, verwysings, of kundigheid, maar hierdie vraag sal waarskynlik vra debat, argumente, stemdag, of uitgebreide bespreking. As jy voel dat hierdie vraag kan verbeter word en moontlik heropen, besoek die Hulpsentrum vir leiding. As hierdie vraag kan verander word om die reëls te pas in die hulpsentrum. Let wysig die vraag. Kan jy asseblief voeg 'n skakel na en. wikipedia. org/wiki/CoreData vir almal wat nie weet wat dit is. â € RSabet 7 Februarie 09 by 09:26 Let daarop dat Core Data is nie en moet nie gebruik word as 'n databasis uitvoering maak user142019 6 Augustus 11 by 12:10 4 Antwoorde Hoewel Core Data is 'n afstammeling van Appels Enterprise Object raamwerk. 'n objekrelasionele kartograaf (ORM) wat was / is styf vasgebind aan 'n relasionele backend, Core Data is nie 'n ORM. Dit is, in werklikheid, 'n grafiek bestuur voorwerp raamwerk. Dit bestuur 'n potensieel baie groot grafiek van voorwerp gevalle, sodat 'n app om te werk met 'n grafiek wat nie heeltemal in die geheue sal pas deur verskuiwing voorwerpe in en uit geheue as wat nodig is. Core Data bestuur ook beperkings op eiendomme en verhoudings en maintins verwys integriteit (bv hou vorentoe en agtertoe skakels konsekwent toe voorwerpe bygevoeg / verwyder / na 'n verhouding). Core Data is dus 'n ideale raamwerk vir die bou van die model komponent van 'n MVC argitektuur. Om sy grafiek bestuur te implementeer, Core Data gebeur met SQLite gebruik as 'n skyf stoor. Dit kon gewees het geïmplementeer met 'n ander relasionele databasis of selfs 'n nie-relasionele databasis soos CouchDB. Soos ander het daarop gewys, kan Core Data ook XML of 'n binêre formaat of 'n gebruiker geskryf atoom-formaat te gebruik as 'n backend (alhoewel hierdie opsies vereis dat die hele voorwerp grafiek pas in die geheue). As jy belangstel in hoe Core Data geïmplementeer op 'n sqlite backend, wil jy dalk om te kyk na OmniGroups OmniDataObjects raamwerk, 'n open source implementering van 'n subset van die Core Data API. Die BaseTen raamwerk is ook 'n uitvoering van die Core Data API gebruik van PostgreSQL as 'n backend. Omdat Core Data is nie bedoel om 'n ORM vir SQLite wees, kan dit nie lees arbitrêre SQLite skedule. Aan die ander kant, moet jy nie staatmaak op die vermoë om Core Datas SQLite data winkels saamgelees met ander SQLite gereedskap die skema is 'n implementering detail wat kan verander. So, daar is nie regtig 'n botsing tussen die gebruik van Core Data of sQLite direk. As jy 'n relasionele databasis wil, gebruik SQLite (direk of via een van die Objective-C omhulsels soos FMDB), of 'n relasionele databasis bediener. U kan egter nog steeds wil Core Data leer vir gebruik as 'n grafiek bestuur voorwerp raamwerk. In kombinasie met Appels kontroleerder klasse en sleutel-waarde bindend versoenbaar oog widgets, kan jy 'n volledige MVC argitektuur te implementeer met baie min kode. beantwoord 7 Februarie 09 by 18:27 Nota fmdb is nie 'n ORM, net 'n objc wrapper rondom sqlite3 C API uitvoering maak robottobor 7 Februarie 09 by 20:57 Dankie vir die vangs I39ll die post te werk. â € Barry Wark 7 Februarie 09 by 21:27 Groot antwoord - baie dankie uitvoering maak Alex Rozanski 18 Augustus 09 by 17:32 Met IOS 5.0 jy die bykomende voordeel van die vermoë om iCloud lêer-sync gebruik vir gratis as you39re behulp Core Data . As you39re behulp SQLite direk it39ll moet 'n baie handleiding geknutsel en implementering wees om dit te kry om te pas in iCloud. uitvoering maak vreemde Augustus 21 11 by 10:26 En met IOS 5,0 jy die bykomende voordeel van die vermoë om iCloud lêer-sync gebruik vir gratis as jy die gebruik van Core Data. As jy met behulp van SQLite direk itll 'n klomp van die handleiding geknutsel en implementering wees om dit te kry om te pas in iCloud. iOS Databasisse: SQLLite teen Core Data teen Realm As jy 'n groot app wat vinnig loop maak en net werk ( geen foute toegelaat) het youll om oor al ontwikkeling aspekte van jou jeug te dink. Een van die aspekte moet jy uitvind hoe om te stoor en soek vandag vir groot hoeveelhede data, sodat jy waarskynlik 'n databasis te gebruik. Die mees algemene opsies vir IOS databasisse SQLite en Core Data en 'n relatief nuwe speler genoem Realm. Hierdie artikel handel oor die voor - en nadele van elke opsie en bespreek die proses van oorskakeling na Realm as jy reeds gebruik SQLite of Core Data. SQLite is die mees gebruikte databasis enjin in die wêreld en sy open source sowel. Dit implemente n transaksionele SQL databasis enjin sonder opset en geen bediener vereis. SQLite is toeganklik op Mac OS X, IOS, Android, Linux en Windows. Dit lewer 'n eenvoudige en gebruikersvriendelike koppelvlak programmering soos dit in ANSI-C geskryf is. SQLite is ook baie klein en lig en die volledige databasis kan gestoor word in 'n kruis-platform skyf lêer. Die redes vir die groot populariteit van SQLite is sy: Onafhanklikheid van 'n bediener Zero-opset Veilige toegang vanaf verskeie prosesse en drade Stores data in tabelle met een of meer kolomme wat 'n spesifieke tipe data bevat. Core Data is die tweede grootste IOS stoor tegnologie wat beskikbaar is om app ontwikkelaars. Afhangende van die tipe van data en die hoeveelheid data wat jy nodig het om te bestuur en te bewaar, beide SQLite en Core Data het hul voor-en nadele. Core Data fokus meer op voorwerpe as die tradisionele tafel databasis metodes. Met Core Data, is jy eintlik die stoor inhoud van 'n voorwerp wat voorgestel word deur 'n klas in Objective-C. Hoewel hulle fundamenteel verskil, Core data: Gebruik meer geheue as SQLite Gebruik meer stoorplek as SQLite Faster in haal rekords as SQLite. Daar is 'n nuwe (ish) speler in die dorp genoem Realm. Ryk is ontwerp om vinniger en meer doeltreffend as die vorige databasis oplossings te wees. Hierdie nuwe oplossing is 'n kruis-platform mobiele databasis genaamd Realm. Dit is beskikbaar in Objective-C en Swift, en sy ontwerp vir IOS en Android. Die groot upsides van Realm is: Sy absoluut gratis, vinnig en maklik om te gebruik. Onbeperkte gebruik. Werk op sy eie voortbestaan ​​enjin vir spoed en werkverrigting. Wat is werklik 'n groot oor dit is dat jy al die werk kan hanteer met 'n paar reëls van die kode. Gebied is baie maklik om te installeer en vinniger om te werk met in vergelyking met SQLite en Core Data. Ook die databasis lêers is deelbaar onder IOS en Android. As jy die ontwerp van 'n app met 'n baie rekords en vir 'n groot aantal gebruikers, moet jy spesiale aandag te skenk aan scalability van die begin af. Ryk is groot op hierdie en dit laat jou toe om 'n klomp data vinnig te hanteer. Om te begin met Realm, al wat jy nodig het, is ten minste IOS 8 of OS X 10.9. Ouer weergawes hoef te ondersteun hierdie nuwe eenvoudige oplossing vir die bestuur van plaaslike stoor en databasisse. Skakel oor na Realm As jy het saam met Core Data en jy wil aan te beweeg na Realm, die proses is eenvoudig. Baie ontwikkelaars het die reis in 'n paar uur het. Let daarop dat beide Core Data en Realm verrassing data as so voorwerpe wat jy hoef te doen is refactor die Core Data-kode vir Realm gebruik. Verwyder die Core Data Framework. Vind die deel van jou kode wat Core Data-kode sluit en refactor hulle. Hulle skets 'n mooi truuk om 'n samesteller fout gooi vir elke reël van die kode behulp Core Data Verwyder die Core Data Setup Kode. Theres gaan 'n gedeelte van Core Data opstel kode iewers in jou jeug en wat jy nodig het om ontslae te raak van dit alles. Gebied word outomaties ingestel sodra jy toegang tot 'n ryk voorwerp vir die eerste keer. Jy kan kies waar jy wil hê dat die Realm data lêer te stoor, en dit sal steeds opsioneel tydens looptyd wees. Migreer jou model lêers. Jy kan beheer voorwerp subklasse maklik omskep om ryk. Gebied bestuur eiendom sleutelwoorde intern (jy hoef nie om dit te spesifiseer), wat maak die klas kop lyk meer minimaal. Ook, kan jy veilig verwyder alle NSNumber cruft omdat Realm ondersteun eenvoudige numeriese data (NSInteger en CGFloat). Daar is ook beperkings op Realm. In teenstelling met Core Data wie voorwerpe het NSManagedObjectID om voorwerpe uniek identifiseer, Realm laat dit aan jou as die ontwikkelaar. In die tweede plek, die huidige weergawe van Realm cant hanteer voorwerp eiendomme met 'n nul waarde. Dit is 'n klein ongerief, maar die ontwikkelaars is belowe dat die volgende weergawe van Realm hierdie probleem gewoond te hê. Migreer Jou Skryf Bedryf. Realm8217s red bedrywighede is 'n bietjie anders as in Core Data en wat jy nodig het vertroud is met hierdie te kry. Sodra die Realm voorwerpe bygevoeg om 'n gebied voorwerp, hulle kan nie verander word nie. Dit verseker konsekwentheid van data in verskillende drade. Om in staat wees om die eienskappe te verander, die voorwerp waar hierdie gered moet word in 'n skryf transaksie. Migreer jou vrae in staat wees om jou data te haal as dit nodig is. Om 'n lêer te gaan haal, in Core Data Jy benodig ongeveer 10 reëls van die kode. In Realm, kan jy dieselfde ding doen met net een reël. Migreer Jou Gebruikers Produksie Data vir aktiewe programme geskep in Core Data, kan jy weer skakel die Core Data raamwerk terug in die jeug, haal gebruikers data en gee dit vir ryk. 'N makliker oplossing vir vervangbaar gebruikers data is verwyder al Core Data red lêers en begin oor die volgende keer die inligting is oop. Die sleutel is om jou ontwerp proses so eenvoudig met die beste tegnieke en hulpmiddels te hou. Sodra youve tyd om jou beproefde en ware proses belê dont laat die aantrekkingskrag vir nuwe neem jou van koers af. Mag die nuwe werk om 'n deel van jou proses en tyd is die detector van wat nie werd nie. Post navigationCore Data Image Caching Gepubliseer op 16 Maart 2012 deur Hawk iMedia Dit is 'n algemene patroon vir 'n app om iets met data wat nie plaaslike doen. Die handhawing van goeie artikels prestasie terwyl gaan haal die data is 'n uitdaging (en nie die fokus van hierdie artikel). Hou die data, en genoeg van dit vir latere gebruik en om te verhoed dat met dit weer te kry, is nog 'n uitdaging. Daar is voor die hand liggend oplossings, 'n paar maklike en 'n paar nie, en almal met hul eie voordele en nadele. Wat is die kas Caching is eenvoudig, hou iets om vir latere gebruik wat 8220hard8221 was in die eerste plek te kry. Dit kan wees eksterne data, 'n berekende waarde, of enigiets wat eerder nie you8217d moet meer as een keer te verkry as jy dit kan vermy. Caching moet nie beskou as 'n oneindige proses egter. Daarmee bedoel ek jy can8217t net kas alles vir ewig Jy moet 'n manier om die kas van tyd tot tyd op grond van 'n algoritme wat sin maak vir jou aansoek te reinig nie. 'N Algemene (en eenvoudige) algoritme kleinste Onlangs gebruik word, of LRU. Met hierdie algoritme, die teorie is dat die items in jou kas wat die minste gebruik is kandidate om versoen vorm die kas wat gebaseer is op 'n paar drumpel van nie-gebruik. Jy kan dink dat op 'n mobiele toestel suiwering die kas is belangrik as gevolg van die inherente ruimte beperkings. Jy kan ook kies om 'n beperkte hoeveelheid data kas (maar you8217d steeds nodig om te weet wat om te daal as die kas het te groot.) Doelwitte van kas Die redes vir die kas is redelik eenvoudig: Maar hoe is dit bereik Dit hang gedeeltelik op watter 'n redelike definisie van 8220performance8221 is vir jou inligting. Prestasie as dit betrekking het op die kas sal duidelik in verskillende plekke wees: Aanvanklike kas vrag kas skoonmaak toegang Cache Cache red Soos duidelik as I8217ve het hierdie lys, dit blyk dat elkeen van hierdie dinge is verwant aan mekaar tot 'n mate. Byvoorbeeld, kas suiwering is iets wat jy kan uit te voer tydens die kas laai. Die frekwensie van die kas, behalwe moet wees met betrekking tot iets soos hoe 8220dirty8221 die kas is (hoeveel dinge verander het sedert die laaste red) of hoeveel tyd verloop het sedert die die laaste red. Implementering opsies Daar is verskeie opsies vir die implementering van 'n kas. Jou keuse hang baie af van watter soort inligting wat jy is caching, hoeveel data wat jy nodig het om die kas, hoe jy jou kas (dit wil sê suiwering) sal slaag, en waarskynlik 'n baie ander spesifiek vir jou app dinge. Die voor die hand liggende keuse sluit in: databasis woordeboek lêers of 'n kombinasie van hierdie Let8217s kyk na elkeen. Woordeboek Gebruik 'n woordeboek lyk soos 'n ooglopende keuse. Hulle is maklik om te gebruik, en maklik om te verstaan. Vir baie klein datastelle, kan dit 'n goeie keuse wees. Maar wanneer jou datastel kry 8220large8221, sal jy begin om prestasie kwessies sien veral wanneer jy nodig het om dit te laai, te reinig nie, of stoor dit. Die gebruik van 'n woordeboek is beslis maklik en vinnig. So ook, lees en skryf van 'n woordeboek is maklik nie, maar as jou datastel groei, sal hierdie aksies stadig omdat you8217re lees geword en skryf die hele woordeboek. Voor: Vinnig en maklik, veral vir klein datastelle Nadele: Nie skaalbare, maw prestasie vertraag as die datastel groei. Lêers Individuele lêers kan 'n verbetering wees. As you8217re kas sê, miniatuur prente, kan jy 'n plan te ontwerp vir die skryf van elke lêer aan die lêerstelsel op 'n wyse wat later kan jy dit weer te vind. Dit het die voordeel dat you8217re net lees en skryf van 'n enkele lêer op 'n slag. Dit het die nadele wat jy kan om 'n swaar las op die lêer stelsel en dit is moeilik, sonder addisionele meta data elders geberg, in die kas te bestuur in terme van suiwering ou data of die beperking van it8217s grootte. Hierdie benadering is 'n bietjie meer ingewikkeld as die gebruik van 'n woordeboek, maar nog steeds eenvoudig genoeg om te verstaan ​​en te hanteer. Voor: Hard aan die kas suiwering databasis Jy het waarskynlik gewonder bestuur wanneer I8217d kry om CoreData n databasis bied 'n mooi onttrekking tot jou inligting, nie om ewetoeganklike noem: Nog eenvoudige, en moet relatief vinnig op te slaan en data te haal nie, behalwe in uitsonderlike gevalle nadele wees Meer oor dit later.


No comments:

Post a Comment