begyndt med mål

, komme i gang med objective-c,,,,, 2,,,,,,,,, 5,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie kaldet lære programmerbare sdk udvikling fra bunden. læring c: en primerexploring den programmerbare sdk, indledning, med de grundlæggende c stadig frisk i hukommelsen, det er tid til at blive bekendt med objective-c. den afgørende forskel er, at objective-c c der er et objekt orienterede programmeringssprog, mens c er en proceduremæssig programmeringssprog.det betyder, at vi er nødt til at forstå, genstande, og hvordan de vedrører klasser.andre centrale begreber, som vi vil undersøge i denne artikel er imod beskeder, indkapsling og arv.,,, oprindelsen af objective-c,, objective-c og kakao er to centrale elementer i den programmerbare platform.på trods af at de programmerbare platform er stadig relativt unge, objective-c blev oprettet i begyndelsen af 1980 'erne i stepstone af brad cox og tom elsker.sproget blev oprettet i et forsøg på at kombinere den robuste og fleksibel c programmeringssprog med elegant smalltalk sprog.objective-c er en streng superset c, og i modsætning til c, er det et højt niveau programmeringssprog.den afgørende forskel mellem c og objective-c er, at sidstnævnte er et objekt orienterede programmeringssprog, mens c er en proceduremæssig programmeringssprog.,, hvordan programmerbare ender på et sprog, som er udviklet i 1980?kort efter næste blev grundlagt af steve jobs, det overførte objective-c fra stepstone.næste skridt er skabt en brugergrænseflade værktøjssæt til næste operativsystem udviklet i objective-c., selv om skridt, forudsat at en revolutionær værktøjssæt, den næste operativsystem opnåede kun lille trækkraft på markedet.i 1996, æble erhvervet næste og skridt blev kakao.sidstnævnte var mainstream med indførelsen af os x i marts 2001 og senere med frigivelsen af den iphone og programmerbare operativsystem.,,, objekt orienterede programmering, proceduremæssige programmering, et program består af en række procedurer og rutiner, der er udført for at nå frem til en bestemt medlemsstat.i objekt orienterede programmering, men en samling af genstande sammen og arbejde sammen, for at fuldføre en opgave.selv om det endelige resultat kan være identiske, metodologi og grundlæggende paradigmer er væsentligt anderledes.modularitet og kode genbrugelighed, er to af de vigtigste fordele af mål rettet programmeringssprog, som vi snart vil se.,,, objective-c, kakao, og kakao berøring, udviklere nye til programmerbare og os x økosystemer bliver ofte forvirrede over forholdet mellem objective-c, kakao (os x) og kakao rør (105).hvad er kakao røre, og hvordan hænger det sammen med objective-c?kakao er æble er indfødt applikationsprogramgrænseflader (api) til programmerbare og os x platforme.objective-c er det sprog, der magter kakao.mens denne artikel fokuserer primært på objective-c programmeringssprog, vi vil kigge nærmere på kakao og røre api 's senere i denne serie.,,, klasser, genstande, og tilfælde, en hindring for udviklere nye protestere orienterede programmering er sondringen mellem klasser, genstande, og tilfælde.en klasse er en støbt eller plan for oprettelsen af genstande, mens tilfælde er unikke begivenheder af en klasse.en ting er en data - struktur, der er en stat og opførsel.på trods af den lille forskel mellem ting og sager, begge begreber er ofte bruges i flæng. lad os se på et eksempel: brødristere.før en brødrister er fremstillet, ingeniører, skabe en model, der svarer til en time.hver brødrister skabt fra plan er en instans eller en enestående begivenhed i klassen.selv om hver brødrister er skabt af samme model (klasse), de hver har deres egen stat (farve, antal ankomst - og afgangstidspunkter osv.) og adfærd, f.eks. variabler og indkapsling, staten et tilfælde er oplagret i og defineret ved dets instans variabler eller genstand er attributter, hvis du vil.dette bringer os til et andet centralt mønster af mål rettet programmering, indkapsling,.indkapsling, betyder, at de interne repræsentation af en genstand, er private og kun kendt til formål i sig selv.det kan virke som en alvorlig begrænsning ved første øjekast.men resultatet er modulopbygget og løst koblet kode. lad os vise indkapsling med endnu et eksempel.den hastighed, hvormed en bil er målt ved den bil er interne affærer, men føreren ved bilens hastighed, ved at se på speedometeret.føreren behøver ikke vide noget om eller forstå bil er mellemrum at vide bilens hastighed.den bil er føreren behøver ikke forstå, hvordan motorer virker til at være i stand til at køre i den bil.nærmere oplysninger om, hvordan en bil er skjult for føreren.staten og opførsel i bilen er skjult for føreren og er tilgængelige, ved hjælp af bilen er grænseflade (rat, bremsepedalen, instrumentbræt, osv.),, arv,, en anden magtfulde paradigme objekt orienterede programmering er klasse arv.ved klasse a - er en underklasse af klasse b, kategori a arver egenskaber og opførsel af klasse b. klasse b - siges at være forælder klasse eller superclass i klasse a. arv fremmer også kode genbrugelighed og modularitet.,, - metoder og - egenskaber, metoder er programmer i forbindelse med en klasse og definerer de adfærd en klasse og dens tilfælde.metoderne for en klasse har adgang til optegnelser af en instans, og derved kan ændre situationen i f.eks.med andre ord, staten en instans (dvs., f.eks. variabler) kontrolleres af metoderne for en instans (dvs., f.eks. metoder,). på grund af indkapsling mønster, f.eks. variabler i en klasse, kan således ikke er frit.men de har adgang til via, getters og montører, metoder, med det ene formål at få, og at instans variabler.egenskaber er en del af objective-c at gøre indførelsen af accessors (getters og montører) trivielt.på trods af nytten af accessors, hurtigt bliver besværligt at skrive accessor metoder for hver instans variabel.vi vil undersøge egenskaber mere detaljeret senere i denne artikel.for nu, overveje egenskaber som indpakning omkring instans variabler, som gør det lettere at arbejde med, f.eks. gennem getters variabler og omgvelserne.,,, læring som eksempel, lad os sætte vores viden i praksis ved at skabe en ny xcode projekt til at arbejde med.skabe et nyt projekt i xcode ved udvælgelsen af nye > projekt... fra  , fil menuen.,,,,,, som vi gjorde i den foregående artikel, udvælge, kommando linjen værktøj, projekt skabelon i anvendelsen, kategori i, os x, punkt.,,,,,, lægemidlets navn, til bøger, og at give projektet en organisation navn og virksomhedens id.til dette projekt, er det vigtigt, at projektets type, institut.årsagen til dette valg bliver klar senere i denne artikel,.,,,,, fortæl xcode, hvor du ønsker at redde projektet og klik, skabe, button.du kan mærke, at projektet ser anderledes ud end det projekt, vi har skabt for læring c. lad os tage et øjeblik til at se, hvad der er forskellene.,,,,,, projektoversigt, projektet indeholder et par sager og foldere end kommandolinjen redskab, vi har skabt i den foregående artikel.i tillæg til vigtigste. m, og bøger. 1, er der to nye mapper, støtte til filer, og rammer, som hver indeholder et punkt på dagsordenen.,,, støtte til filer, der indeholder en fil, der hedder bøger præfiks. pch,.den fil. pch, udvidelse, fortæller os, at dette er en, precompiled headerfilen.dens formål er blevet klart senere i denne serie.,,, rammer, folder indeholder rammerne, at projektet er forbundet med.hvad er en ramme.en ramme er et bundt eller fortegnelse, der indeholder et bibliotek, herunder dets ressourcer, såsom billeder og delt filer.begrebet headerfilen vil blive klart, om et øjeblik.den rammer, folder indeholder i øjeblikket et punkt på dagsordenen, institut. rammer,.,, der med det projekt, de satte projekttype, fond, hvilket betyder, at projektet er knyttet til instituttet ramme.instituttet ramme er et grundlæggende sæt af objective-c klasser.senere i denne serie, vil vi tage et nærmere kig på instituttet ramme.,,, skabe en klasse, er det på tide at skabe din første klasse.når de skaber et nyt dossier (, fil > nye > fil,), du har fået forelagt en liste over fil - modeller.vælg, kakao, fra, os x, punkt og udvælge, objective-c klasse, model at oprette en ny objective-c klasse.klik, dernæst at fortsætte.,,,,, giver den nye klasse a - navn, bogen, og dets underklasse, nsobject,.som vi tidligere har set, at den nye klasse en underklasse af, nsobject, den nye klasse vil arve egenskaber og opførsel, nsobject,.det betyder, at den nye bog, klasse får nogle funktioner, gratis.,,,,, klik, dernæst at fortsætte og fortælle xcode, hvor du vil redde den nye klasse.sørg for at redde den nye klasse et sted i jeres xcode projekt.,, xcode har tilføjet to nye filer til projektet, bog. h, og bog. m.bog. h, er headerfilen af, bog, klasse og udsætter klasse grænseflade, som vi tidligere har set.en klasse grænseflade indeholder egenskaber og metoder i klassen, og det angives ligeledes klasse er superclass.bog. m, er gennemførelsen fil i klassen og fastlægger dens adfærd ved at gennemføre metoder angivet i klasse headerfilen.,, headerfilen, åben bog. h, og udforske dens indhold.bortset fra nogle bemærkninger på toppen, headerfilen kun indeholder tre linier.den første linje import headerfilen af instituttet ramme.dette sikrer, at den bog, klasse, har adgang til undervisning og protokoller, angivet i instituttet ramme.,,&#import < institut /institut. h >,, anden og tredje linje, som et par.i objective-c hver klasse grænseflade begynder med @ grænseflade, og ender med @ ende, som er både de direktiver, det er ordrer og instrukser til den anden.den @ grænseflade, direktiv er efterfulgt af navnet på den kategori, tyktarm, og klasse er  , superclass, - hvis det er relevant.som vi tidligere har set, de stiftende klasse eller superclass er den klasse, som det arver egenskaber og opførsel, @ grænseflade bog: nsobject @ ende,,, nsobject, er den grundlæggende kategori af flertallet af objective-c klasser.de første to breve, ns, henvise til sin oprindelse, skridt, som vi tidligere har set i denne artikel.ved arvet fra nsobject, klasser, opfører sig som objective-c klasser og arve en grundlæggende grænseflade til runtime system.,, gennemførelse fil, før vi laver ændringer til den bog, klasse, lad os tage et hurtigt kulminere med, bog. m, klassen er gennemførelsen fil.i stedet for at importere instituttet ramme gennemførelsen fil import headerfilen af, bog, klasse.hvorfor er det nødvendigt?gennemførelsen fil har behov for at vide, hvad egenskaber og metoder, der er angivet i headerfilen, før det kan gennemføre adfærd (dvs. metoder) i klassen.import redegørelse efterfølges af gennemførelsen af klasse, der er angivet ved, @ gennemførelsen, og @ ende,.,, at tilføje ejendomme og metoder, den bog, klasse er ikke særlig nyttigt i den nuværende gennemførelse.gå over til headerfilen og tilføje tre egenskaber, år, titel, og forfatter, og tilføje en metode, der hedder, bookinfo,.,, egenskaber, angives med, @ ejendom, nøgleord og kan erklæres i hele klassen er  , @ grænseflade, block.den @ ejendom, nøgleord er efterfulgt af den type og navn på ejendommen.glem ikke den asterisk foran, titel, og forfatter, egenskaber, fordi en kakao objekt er altid opført som et fingerpeg.,,&#import < institut /institut. h > @ grænseflade bog: nsobject @ ejendom int. år @ ejendom nsstring * afsnit @ ejendom nsstring * forslagsstiller. - (nsstring *) bookinfo; @ ende, metoden erklæring lidt ligner en funktion prototype, men der er en række vigtige forskelle.metoden erklæring begynder med et minustegn angiver, at dette er et tilfælde - metoden.klasse, der er indledt med et plustegn.minus tegn efterfulgt af afkast type metoden i parentes, et tilfælde af  , nsstring, og navnet på den måde.metoden erklæring ender med et semikolon.,, jeg er sikker på, at du tænker på hvad, nsstring, er, og hvorfor den skal betragtes som en retningslinje.det, nsstring, klasse er medlem af instituttet ramme.det erklærer den grænseflade til en genstand, der forvalter et uforanderligt snor.i den foregående artikel, så vi, at en snor i c kan være repræsenteret af en række tegn, og det er netop, hvad, nsstring, klasse, det forvalter en række tegn under hjelmen.fordelen ved, nsstring, er, at det at arbejde med strenge meget lettere.,, gennemførelse, bookinfo, nu, hvor vi har erklæret, bookinfo, metode i klassen er headerfilen, det er tid til at gennemføre det i klassen er gennemførelsen fil.åben bog. m, og tilføje følgende kode snippet et eller andet sted i, @ gennemførelse, block.før vi bryde gennemførelsen af bookinfo, ned, vi må tale om objekt messaging.,, - (nsstring *) bookinfo {nsstring * bookinfo = [nsstring stringwithformat: @ "% @ blev skrevet af% @ og offentliggjort i% i", self.title, self.author, self. år tilbage bookinfo];;), imod beskeder, ved vi allerede, at den opførsel af en klasse er defineret gennem sine metoder.at kalde en metode på en genstand, der sendes et budskab til formålet.inspektion af følgende kode snippet at forstå dette begreb.lad os opdele det linie for linie.i første linje, erklærer vi en ny serie og tildele det en konstant snor af indpakning strengen i to citater og forud for den med en @, tegn.,, nsstring * snor = @ "dette er en række tegn." int længde = [snor længde] nslog (@ "længde de snor er%. \\ n" længde), i anden linje, vi sender et budskab om, længde, snoren instans.med andre ord, vi kalder den metode, længde på snoren instans og den metode, returnerer et heltal.det hele er tilknyttet, længde, variable af typen, int.i sidste linje, vi logge længde variabel til hinanden ved at kalde den, nslog, fungerer, som vi så i den foregående artikel.,, sende meddelelser til objekter er noget du vil gøre en masse, så det er vigtigt at forstå de syntaks.selv om syntaks ser underligt ud, hvis du er ny i objective-c, er det ikke svært at forstå.i kantet parentes er genstand på venstrefløjen og den besked eller metode navn til højre.,, [formål meddelelse], metoder, der accepterer argumenter se lidt anderledes, men den generelle syntaks er identiske.det, nsstring, klasse, for eksempel, har en anden metode, der hedder, substringfromindex:,.colon i slutningen af navn, viser, at denne metode accepterer et argument.til denne metode på en snor ser sådan ud:,, nsstring * substring = [snor substringfromindex: 5], objective-c er kendt for sin lange og vidtløftige metode navne.tag et kig på følgende eksempel, som omfatter en metode navn med flere argumenter.du er nødt til at indrømme, at navnet på den måde klart, hvad metoden.metoden navn er opdelt i stykker med hver bid at acceptere et argument.objekt messaging virkelig vil synke ned i, når vi begynder at arbejde med programmerbare sdk.,, nsstring * anotherstring = [snor stringbypaddingtolength: 5 withstring: @ "streng" startingatindex: 2], før vi går videre, vi er nødt til igen at se på gennemførelsen af bookinfo,.metoden gennemførelse begynder ved at gentage metode erklæring.de følger efter semikolon erstattes med et par curly seler, der pakker omkring gennemførelsen af metoden.vi erklærer en ny serie, bookinfo, og tildeler den en ny serie, der skabes med attributter til vores bog instans (, titel, forfatter, og år).ved afslutningen af den, bookinfo, metode, vi vender tilbage til den nye serie, bookinfo,, fordi det er, hvad de forventer en streng metode, som vender tilbage.,, tre ting kræver en afklaring.for det første metode, stringwithformat:, er en klasse metode og ikke et tilfælde metode.vi ved det, fordi metoden kaldes for klasse i sig selv, nsstring, og ikke et tilfælde af klassen.klasse metoder er fælles i objekt orienterede programmeringssprog.for det andet format specifier for et objekt er repræsenteret ved, @, symbol (efter procent tegn).begge afsnit og forfatter, er genstande, tråde, for at være præcis.for det tredje nøgleord, jeg altid henvisninger klasse f.eks.i dette tilfælde, jeg refererer til, bog, f.eks. som den metode, bookinfo, tilhører.,, accessors op igen, hvis du har arbejdet med andre formål orienterede sprog, adgang til instans variabler i objective-c kan være forvirrende.vi ikke har direkte adgang til et tilfælde med variabel, når vi skriver selv. titel.det er ikke mere end en genvej til [selv afsnit].dette betyder, at vi bruger albuer metode til at bede instans for eksempel variabel ved navn, titel,.  , det samme gælder for fastsættelse af en instans variabel.tag et kig på følgende kode snippet.som du kan se, er anvendelsen af self.title, er intet andet end syntaktisk sukker. //denne opgave...self.title = @ "ledige"; //...svarer til...[en settitle: @ "ledige"].,,, id, nul, nul,,,,, id,,, før vi begynder at bruge den bog, klasse, jeg vil tale om nogle nøgleord, som forvirrer folk fra tid til anden.når du ønsker at opbevare en genstand uden udtrykkeligt definerer typen af det formål, de bruger, id, data, som også misligholdelse type for tilbagevenden og argument erklæringer for objective-c metoder.,, magt og nytten af det, id, datatype går langt videre, selv om.det, id -, data - er et centralt element i objective-c dynamiske maskinskrivning og dynamisk bindende.det er vigtigt at forstå, at de, id, data - og som ikke har nogen oplysninger om målet i sig selv, end at det er et objekt., i objective-c, hver genstand ved, hvad klasse tilhører (gennem en, isa, variabel), og det er kritisk.hvorfor er det?en af de stærke sider af objective-c er dens dynamiske maskinskrivning, hvilket betyder, at type kontrol udføres på runtime i stedet for at udarbejde.,, men da, id, data, ikke sige noget om den anden klasse objektet tilhører, og selv skal give disse oplysninger til den ansvarlige.,, husk på, at det er helt acceptabelt for statisk - et objekt i objective-c ved udtrykkeligt at angive en genstand er klasse i stedet for at bruge det, id, datatype.,, dynamisk bindende, dette fører os til endnu en vital del af den objective-c runtime, dynamisk bindende.i objective-c, en vigtig forskel mellem funktioner og meddelelser er det en besked og den modtagende objekt er ikke sluttet sig sammen, indtil runtime.,, hvad betyder det, og hvorfor er det vigtigt?det betyder, at metoden anvendes i forbindelse med et budskab til et objekt er fast besluttet på runtime, når både den besked, og formålet er kendt.det er det, der er kendt som dynamiske bindende.,, nul, nul, og, i objective-c, nøgleordet, nul, er defineret som en, nul, objekt, der er en, id - kort med en værdi på 0,.under motorhjelmen, er der ingen forskel mellem, nul, nul, nul,,,,,, og at det er muligt at sende meddelelser til hver af dem uden en undtagelse er kastet.,, finder konventionen anvendelse, nul, nul, genstande, af klasser, og, for ellers.at være i stand til at sende beskeder, nul, nul, nul, og har fordele, men det har også ulemper.for mere information om nul, nul, og  , nul, se på dette spørgsmål om stak overløb.,,, at genstande, åben, main. m, og tilføje en import - erklæring til at importere headerfilen af, bog, klasse.i stedet for at bruge vinkel parentes, vi bruger to citater til at importere headerfilen af, bog, klasse.to citater benyttes til lokale filer, mens vinkel parentes anvendes til globale omfatter anvendelse af projektet omfatter vej.,,&#import < institut /institut. h >&#import "bog. h", umiddelbart under, nslog, ringe, tilføje følgende indlæg til at skabe et tilfælde den bog, bog, klasse., * book1 = [[bog forpl] lokalitet] book1.title = @ "ledige" book1.author = @ "periode tolkien" book1.year = 1937,,, i første linje, vi erklærer en variabel af type  , bog,   og aktivere den.det er et godt eksempel for at illustrere indlejrede metode opkald.den første metode på  , bog,   klasse er  , forpl.de nærmere oplysninger om denne opfordring er ikke vigtigt.konklusionen er, at hukommelsen er  , tildeling, 3 for den nye ting, og der er skabt, på grund af den bygger rede for opkald,  , lokalitet,   metode er opfordret den nye ting, der blev oprettet ved  , tildeling,   metode.den  , lokalitet,   metode  , lokalitet, ializes den nye ting, oprettelse af formålet og gøre den klar til brug.den  , lokalitet,   metode, returnerer den instans, og i vores eksempel, overdrager det til  , book1,   variabel.,, de næste tre linjer, bør være bekendt med, sætter vi den titel, forfatter, og offentliggørelse af den nye bog.,, lad os skabe en anden bog, og der tilsættes både bøger til en objective-c system.oprettelsen af den anden bog er ikke nye.den eneste forskel er, at vi har udtrykkeligt anvendelse af klasse er maskinsættere at fastsætte instans variabler i den nye instans.,, bog * book2 = [[bog forpl] lokalitet]; [book2 settitle: @ "eventyret om ringen"]; [book2 setauthor: @ "periode tolkien"); [book2 setyear: 1954); nsarray * bøger = [[nsarray forpl] initwithobjects: book1, book2, nul], i den sidste linje, skaber vi et tilfælde af  , nsarray,, en anden klasse af instituttet ramme.den  , nsarray,   klasse er et system, der kan lagre en ordentlig liste over genstande.ligesom vi gjorde med bogen tilfælde, vi tildeler hukommelse og sæt det nye system, i stedet for at  , lokalitet, er det dog nødvendigt  , initwithobjects:,.  , initwithobjects:,   er udpeget initializer, hvilket betyder, at det er en  , lokalitet,   metode med nogle ekstra klokker og fløjter for at lette objekt initialization.,,, initwithobjects:,   accepterer en række ting, som du ønsker at oplagre i nettet.den liste over genstande bør ende med  , nul,.,, blanding c og objective-c, jeg allerede har nævnt flere gange, at objective-c er en streng superset c, og at vi frit kan kombinere c og objective-c.. lad os se, hvordan det fungerer.vi begynder ved hjælp af en simpel, hvis /anden erklæring, for at kontrollere, om systemet indeholder objekter.ved at sende et budskab om den vifte, greve, det vil vende tilbage til det antal genstande, det indeholder,.,, hvis system indeholder ting, vi bruger en  , for brug, iterate over genstande i nettet.under hver iteration beder vi system til formål på indeks, og sende den genstand, et tilfælde af den bog, - budskab om, bookinfo,.som vi tidligere har set, bookinfo, returnerer en instans, nsstring,, som vi log til konsollen.,, hvis ([bøger tæller] > 0) (for int (i = 0. jeg < [bøger tæller] jeg + +) (bog * abook = [bøger objectatindex - jeg] nslog (@ "% @" [abook bookinfo]);}},,, konklusion, jeg er sikker på, at du er lidt overvældet af objective-c., det er normalt.selv om objective-c er intet mere end et tyndt lag oven på c - sprog, der er en hel del.,, mens der er mere objective-c end omhandlet i denne artikel, nu ved du det grundlæggende og er klar til at begynde at arbejde med programmerbare sdk.i den næste artikel, vil vi se på de programmerbare sdk og undersøge de forskellige komponenter.









Previous:
Next Page: