Video: Factorio og programutvikling – Helge Holm – RevolverConf 2016.2 2025
Av Karl G. Kowalski
Macintosh applikasjonsutvikling krever kreativitet, Objective-C programmeringsferdigheter, litt tålmodighet og en god hjelp av utholdenhet til å implementere, og leverer Macintosh-programmet ditt i god stand til brukerne. På vei til denne destinasjonen møter du noen utfordringer som vil teste programmerings- og problemløsningskompetanse. Du må ta tak i (blant annet) å bruke delegater til å implementere tilbakekallingsprogrammer; bruker ikke-mål-C-rammer fra Apple; og inkorporere C ++-koden i appene dine.
Macintosh-programutvikling brukertilbakeringinger for å tillate Mac OS X å utføre kode i appen din for bestemte operasjoner. Hvis du oppretter en standard Macintosh-vindu eller en dokumentbasert app, vil den aller første koden som OS X utfører, finnes i en av følgende tilbakeringingsmetoder du må opprette for appen din, avhengig av appdesignen:
-
Dokumentbaserte apps: (void) windowControllerDidLoadNib: (NSWindowController *) windowController
-
En tilbakeringing er rett og slett en metode som operativsystemet til slutt utfører mens det prøver å levere eller hente informasjon fra appen din. Din søknadskode vil utføre en metode for en kakao klasse hvor appen din vil få muligheten til å gi navnet på en metode for en av klassene dine, for å bli kalt på et objekt av den klassen din app vil også måtte gi.
A delegat er et hjelperobjekt, som en kakao-klasse bruker til å forlenge klassens funksjonalitet ved å tillate deg å implementere kode som kakao-klassen vil utføre under visse omstendigheter. En kakao-klasse kontrollerer sitt delegatobjekt (hvis en har blitt tildelt) for om delegaten gir en implementering av en bestemt metode. Hvis delegaten har den metoden, utfører kakao-klassen den metoden. Hvis delegaten ikke implementerer den spesifikke metoden, bruker kakao-klassen enten en standardmetode eller logger en feil. De fleste delegatene må innlemme en bestemt protokoll som bestemmer hvilke metoder de kan implementere; Kodens delegater må bruke implementeringsmetodene fra den spesifikke protokollen som delegaten forventer. Her er noen av kakaoobjekter som kan bruke delegater til å utføre koden din:
NSTableView.NSTableView aksepterer en delegat som følger NSTableViewDelegate-protokollen. Dette inkluderer 20 til 30 metoder som appens delegatobjekt kan implementere for å støtte appens behov for å vite hva NSTableView gjør. Det finnes metoder som vil bli kalt i søknaden din når den trenger å vite og reagere på en handling, for eksempel når en bruker foretar et valg i tabellen eller når en kolonne er endret.
-
NSApplication. Du kan tilordne en NSApplicationDelegate til å håndtere noen av metodene som en NSApplication-forekomst (søknaden din) mottar. Disse metodene kan kalles like før eller like etter at applikasjonen din har utført en annen metode, slik at appen din kan bli forberedt.
-
NSWindow. En NSWindowDelegate tilordnet en av programmets vinduer vil gi appen din sjansen til å svare på en brukerendring, flytting eller andre vinduhendelser.
-
NSMenu. Du implementerer en NSMenuDelegate for å støtte hendelser som skjer når en bruker samhandler med menyer i søknaden din.
-
Ikke-objektiv-C-rammer i Macintosh-applikasjoner
Apple gir mange Macintosh-programutviklingsrammer (kodebiblioteker) som appen din kan ringe for å utføre tusenvis av operasjoner i OS X. Mange av disse rammene, som PDF-filen Kit, består av Objective-C klasser, hvorfra appen din kan opprette og bruke objekter i dine applikasjoner. Noen av disse rammene er imidlertid bare biblioteker med funksjoner som appen din kan utføre.
CFNetwork-rammeverket er for eksempel et sett med funksjoner som appen din kan bruke til å utføre finjusterte nettverksforbindelser. NSURL-klassen gir et godt sett med grunnleggende nettverksoperasjoner som er gode for å hente data ved hjelp av en nettadresse. Hvis appen krever mer kontroll over nettverkskommunikasjonen den initierer, må du bruke CFNetwork-rammen og dens funksjoner. Du kan bruke følgende kode for å forberede en HTTP-forespørsel for overføring til en bestemt nettadresse:
CFStringRef httpBody = CFSTR ("); CFStringRef headerFieldName = CFSTR (" Cookie "); // legge til spesifikk informasjonskapsel til HTTP-forespørsel CFStringRef headerFieldValue = CFSTR ("loginID = my_user_name; password = my_password;"); CFStringRef url = CFSTR ("www. Diabeticpad. Com"); CFURLRef urlRef = CFURLCreateWithStrign (kCFAllocatorDefault, url, NULL); CFStringRef requestMethod = CFSTR ("GET"); CFHTTPMessageRef request = CFHTTPMessageCreateRequest (kCFAllocatorDefault, requestMethod, url, kCFHTTPVersion1_1); CFHTTPMessageSetBody (forespørsel, httpBody); // legge cookie CFHTTPMessageSetHeaderFieldValue (forespørsel, headerFieldName, headerFieldValue); CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage (forespørsel);
Når koden din har Den serielle forespørselen, appen din kan deretter åpne en skrive-stream for å levere forespørselen til bestemmelsesstedet.
Alle de C-baserte Apple-rammene gir en sett med funksjoner for å utføre denne typen programmering på lavere nivå. Koden din blir mer komplisert, men Apple gir ikke mål-C-klasser for alle sine rammer.Hvis du virkelig trenger funksjonaliteten som er tilgjengelig i en av rammene, er dette den eneste måten du kan oppnå appens mål på. Følgende rammer gir ikke mål-C-klasser:
Lydverktøyskasse
-
CFNetwork
-
Kjerne MIDI
-
Kjerne Tekst
-
Katalogtjeneste (for eksempel LDAP og Open Directory)
-
Sikkerhet > Hvis du vil lage apper som kan dra full nytte av funksjonene til OS X, må du være klar til å støtte bruken av ikke-objektive C-kodebiblioteker.
-
C ++-kode i Objective-C Macintosh-applikasjoner
Objective-C gir objektorienterte funksjoner for Macintosh-programutvikling, som arv og polymorfisme. Språket er basert på C programmeringsspråket; Derfor kan du bruke C programmeringskunnskap til å kode innenfor Objective-C. Objective-C ++ er en bromekanisme som tillater Objective-C-kildemoduler å jobbe med Objective-C ++-klasser, som kan kompilere og lenke til C ++-kodebiblioteker.
Følgende enkle eksempel på en kvadratmatrise viser innholdet i en C ++ header-fil for en Matrix-klasse. Matrix-klassen leveres med standardkonstruktøren og destruktoren for en C ++-klasse, og metodene er det du forventer for et grunnleggende firkantmatrisobjekt:
klasse Matrix {public: Matrix (int inSize); virtuell ~ Matrix (); int getSize (void); int getDeterminant (void); void setElement (int inRow, int inCol, int inValue); int getElement (int inRow, int inCol); Matrix operator + (const Matrix & inAddend); privat: int m_size; int [] [] m_elements;};
For å bruke Objective-C ++ må objektiv-C ++ klassemodulene bruke filtypen. mm. Dette forteller Xcodes kompilator at klassen skal kompileres ved hjelp av Objective-C ++, som vil gjøre at klassen din kan bruke C ++-språkord. Ved hjelp av Objective-C + + kan appen lage et Matrix-objekt for å utføre grunnleggende operasjoner, for eksempel å legge til to Matrix-objekter sammen. Dette forutsetter at Objective-C ++-kildemodulen har #imported C ++ Matrix. h-fil:
- (void) addTwoMatrices {Matrix matrixOne (3); // 3x3 matrix Matrix matrixTwo (3); // annen int radIndex = 0; int colIndex = 0; for (rowIndex = 0; rowIndex <3; ++ rowIndex) {for (colIndex = 0; colIndex <3; ++ colIndex) {// angi matrisens elementer til deres verdier matrixOne. setElement (rowIndex, colIndex, XXX); // sett matrise to elementer til noen andre verdier matrixTwo. setElement (rowIndex, colIndex, YYY);}} Matrix matrixSum = matrixOne + matrixTwo;
Med Objective-C ++ kan appene dine dra nytte av alle tilgjengelige tredjepartsbiblioteker som er skrevet for C ++.
