Hjem Sosiale medier Slik bruker du deklarerte egenskaper i din iOS-app

Slik bruker du deklarerte egenskaper i din iOS-app

Innholdsfortegnelse:

Video: Learning iOS: Create your own app with Objective-C! by Tianyu Liu 2024

Video: Learning iOS: Create your own app with Objective-C! by Tianyu Liu 2024
Anonim

Selv om egenskaper og tilfelle variabel tilgang og tilgangsdeler ofte knuses sammen i hjernen til iOS-appen programmerere, sørg for at du forstår egenskapens unike natur og hvordan de egentlig fungerer.

Mens metoder er opptatt av å sende meldinger til objekter for å få ting gjort, egenskaper er opptatt av tilstanden til objektene. Rammer og andre objekter oppfører seg basert på hva de finner i sine egenskaper (dermed kan du endre objektadferd ved å endre en eiendom).

Du vil kanskje også vite noe om tilstanden til objektet, for eksempel fargen, eller om et vindus Root View-kontroller.

Appens visningskontrollere, som fungerer som en bro mellom visningene og modellen, må kunne finne modellobjektet for å få data og sende det oppdateringer. Alt dette gjøres ved hjelp av egenskaper. En eiendom ser ut som følgende:

@property (sterk, ikkeatomisk) IBOutlet UIImageView * bil;

Men ikke alle eiendommene er utsalgssteder. Hvis du velger RTAppDelegate. h-filen i prosjektinspektøren, kan du se at den inneholder en eiendom:

@property (strong, nonatomic) UIWindow * -vinduet;

Som du kan se, betyr rekkefølgen av attributter (sterk, ikke-atomisk og ikke-atomisk, sterk) ingen rolle.

Hva omfatter en deklarert eiendom

En deklarert eiendom har to deler: erklæringen og dens gjennomføring.

Erklæringen bruker @property-søkeordet, etterfulgt av et valgfritt parentesert sett med attributter, typen informasjon og navnet på eiendommen.

Tilgang til eiendommer er implementert ved hjelp av tilgangsmetoder (selv om det i klassen som erklærer eiendommen, kan eiendommen nås direkte, akkurat som forekomstvariabler er). Du kan skrive egne tilgangsmetoder, eller du kan la kompilatoren gjøre det for deg.

Standardnavnene for getter- og setter-metodene knyttet til en egenskap er uansettThePropertyNameIs for getteren og setWhateverThePropertyNameIs: for setteren. I tilfelle av tur er gettermetoden tur, og settermetoden er setTrip:.

For å få tilgang til reisegenskapen i appDelegate, ville du bruke

AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; Tur * thisTrip = [appDelegate tur];

eller for å angi den egenskapen, bruk

AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; [appDelegate setTrip: newTrip];

delegat, forresten, er en UIApplication-eiendom.

Bruke punktsyntaxen

Objective-C gir en dot (.) -operatør som tilbyr et alternativ til firkantbrakettnotasjon ([]) for å påkalle tilgangsmetoder. Du bruker punktsyntaxen på samme måte som du ville når du åpnet et C-strukturelement:

Trip * thisTrip = appDelegate. tur;

eller for å angi den egenskapen, bruk

appDelegate. tur = newTrip;

Når det brukes med objekter, virker punktsyntaks som "syntaktisk sukker" - det forvandles av kompilatoren til en tilgangsmelding. Punktsyntaxen får ikke direkte eller sett en instansvariabel. Kodeksemplene som bruker den, er nøyaktig tilsvarende å bruke brakettnotasjonen.

Mange programmerere som punktsyntaxen fordi den kan være mer lesbar; bare tenk på disse brakettnotasjonssituasjonene hvor du får tilgang til en eiendom som er en eiendom av et annet objekt (det er i seg selv en egenskap av et annet objekt, og så videre).

Den reelle fordelen med punktsyntaxen er imidlertid at kompilatoren vil generere en feil når den oppdager et forsøk på å skrive til en skrivebeskyttet definert egenskap. Dette er så mye bedre enn å måtte avgjøre for en svart metode advarsel fordi du påkalte en ikke-eksisterende setter-metode, med appen som ikke feiler ved kjøretid.

Når du bruker kompilatoren til å lage tilgangsmetoder for deg, oppretter kompilatoren en instansvariabel av typen du har erklært at den vil bruke til å lagre og hente eiendomsverdien med navnet på eiendommen. For eksempel for følgende eiendom:

@property (svak, ikkeatomisk) IBOutlet UIImageView * bil;

uttalelsen

@synthesize bil;

genererer en instansvariabel med navnet på bil av typen UIImage.

Hvis du imidlertid lar kompilatoren automatisk generere en @synthesize-setning for deg, bruker den faktisk et forekomstvariabelnavn som begynner med et underskriftstegn, så du vil få følgende kode generert for deg bak kulissene:

@ syntetiser bil = _car;

Dette gir deg mulighet til å skille mellom eiendomsnavnet (tilgjengelig med selvbil) og instansvariabelenavnet (tilgjengelig bare som _bil).

Apple anbefaler at du bruker eiendomsreferansen (selvbil) i vanlige metoder, men bruk _car-variabelen i init-metoder. Dette gjelder kun koden i en fil. Koden andre steder i appen din får tilgang til egenskapen som den er erklært i @interface-delen av. h.

Det er ingen måte som kodes hvor som helst i appen, bortsett fra i. m-fil i en klasse kan få tilgang til instansvariabelen direkte når du lar kompilatoren gjøre jobben. Og det er en god ting å sikre at innkapslingen er ordentlig gitt.

Skrive dine egne accessors

Du trenger ikke å bruke accessorene generert av kompilatoren; og noen ganger er det også fornuftig å implementere dem selv. Hvis du selv implementerer tilgangsmetoder, bør du sørge for at tilnærmingen din samsvarer med attributter du har erklært.

Hvis du for eksempel har mye overhead for å opprette et objekt som ikke kan brukes, kan du opprette din egen getter-tilgang som lager objektet første gang det er åpnet.I tillegg betyr å skrive din egen accessor at du ikke trenger å ha en instansvariabel knyttet til eiendommen.

Du kan for eksempel ha en arealegenskap på et objekt som representerer et rektangel. Getter for området kan utføre lengde x bredde og bry deg aldri med en instansvariabel.

Få tilgang til instansvariabler med accessors

Hvis du ikke bruker selv, får du tilgang til variabelen direkte. I det følgende eksemplet er ikke angitt tilgangsmetode for _currentDestinationIndex påberegnet:

_currentDestinationIndex = [[NSUserDefaults standardUserDefaults] objectForKey: CurrentDestinationKey];

Det foregående er ikke det samme som

selv. currentDestinationIndex = [[NSUserDefaults standardUserDefaults] objectForKey: CurrentDestinationKey];

For å bruke en accessor må du bruke selvtillit.

Slik bruker du deklarerte egenskaper i din iOS-app

Redaktørens valg

Bruk skjermfeltet til å endre QuickBooks 2014 Rapporter - dummies

Bruk skjermfeltet til å endre QuickBooks 2014 Rapporter - dummies

Skjermbildet i QuickBooks Modify Report dialogboksen lar deg kontrollere rapportintervalldatoen, rapportgrunnlaget, kolonnene og en annen formatering. Bokstavene Rapporter datoområde - Datoer, Fra og Til - gjør det samme som Datoer, Fra og Til bokser i Rapportvinduet. Disse boksene lar ...

Bruk skjermfeltet til å modifisere QuickBooks 2013 Rapporter - dummies

Bruk skjermfeltet til å modifisere QuickBooks 2013 Rapporter - dummies

Hvis du klikker Tilpass rapport, QuickBooks viser dialogboksen Endre rapport, som du kan bruke til å tilpasse en rapport. Når du tilpasser en rapport, endrer du rapportens utseende, layout og informasjonen som den oppsummerer. Dialogboksen Endre rapport ser annerledes ut for ulike rapporttyper. Likevel, hvis du ser forbi ...

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Filtrene kategorien er trolig den mest interessante og en nyttig kategori som er levert av dialogboksen QuickBooks Modify Report. Filtre-fanen lar deg sette opp filtre som du kan bruke til å angi hvilken informasjon som oppsummeres i rapporten. For å bruke Filtrer-fanen velger du først feltet du vil ha ...

Redaktørens valg

Administrere Cloud Computing Resources - dummies

Administrere Cloud Computing Resources - dummies

I teorien bør cloud computing-tjenester ikke være forskjellig fra ressursene i din eget miljø, bortsett fra at de bor eksternt. Ideelt sett har du en komplett visning av cloud computing-ressursene du bruker i dag, eller vil kanskje bruke i fremtiden. I de fleste skymiljøer kan kunden bare få tilgang til ...

Tips for Going Cloud med datanettverkene dine - dummies

Tips for Going Cloud med datanettverkene dine - dummies

Beregning med datanettverket ditt kan være, hva skal du gjøre for å ta nettverket ditt mot skyen? Her er noen anbefalinger: Ikke stole på en dårlig Internett-tilkobling. Først og fremst, før du tar noen av nettverksoperasjonene i skyen, gjør du ...

Nettverkstjenester levert gjennom Cloud Computing - dummies

Nettverkstjenester levert gjennom Cloud Computing - dummies

Tre forskjellige typer nettverkstjenester kan leveres via skyen: applikasjoner , plattformer og tjenester (infrastruktur). I de følgende avsnittene beskrives disse tre typer skyttjenester i større detalj. Programmer i skyen Vanligvis kalt Software as a Service (SaaS), fullt funksjonelle applikasjoner kan leveres via skyen. En av ...

Redaktørens valg

10 Hadoop Ressurser verdt en bokmerke - dummies

10 Hadoop Ressurser verdt en bokmerke - dummies

Følgende er ti fantastiske Hadoop-ressurser som er verdige til å skape en bokmerke i nettleseren din. Disse ressursene hjelper deg med å skape en livslang læringsplan for Hadoop. Sentralnervesystemet: Apache. org Apache Software Foundation (ASF) er det sentrale fellesskapet for open source-programvareprosjekter. Ikke bare et prosjekt kan være et Apache-prosjekt - ...

Data transformasjon i Hadoop - dummies

Data transformasjon i Hadoop - dummies

Ideen om Hadoop-inspirerte ETL motorer har fått mye trekkraft de siste årene. Hadoop er trods alt en fleksibel datalagrings- og behandlingsplattform som kan støtte store mengder data og operasjoner på dataene. Samtidig er det feiltolerant, og det gir mulighet for kapital- og programvarekostnad ...

Datablokker i Hadoop Distributed File System (HDFS) - dummier

Datablokker i Hadoop Distributed File System (HDFS) - dummier

Når du lagrer en fil i HDFS, bryter systemet det ned i et sett med individuelle blokker og lagrer disse blokkene i forskjellige slave noder i Hadoop-klyngen. Dette er en helt vanlig ting å gjøre, da alle filsystemer bryter filer ned i blokker før de lagres til disk. HDFS har ingen ...