Video: Java Tutorial for Beginners [2019] 2024
Av Karl G. Kowalski
Macintosh applikationsutveckling kräver kreativitet, programmeringsfärdigheter för mål-C, lite tålamod och en trevlig hjälp av uthållighet att implementera, och leverera ditt Macintosh-program i god ordning till dina användare. På din väg till denna destination kommer du att stöta på några utmaningar som testar dina programmerings- och problemlösningsförmåga. Du måste komma i kontakt med (bland annat) med hjälp av delegater att genomföra ansökningsanrop. Använda icke-mål-C-ramar från Apple; och innehåller C ++-kod i dina appar.
Implementera återuppringningar i Macintosh-program
Macintosh-programutveckling använder återuppringningar för att Mac OS X ska kunna utföra kod inom din app för specifika operationer. Om du skapar en vanlig Macintosh-fönster eller en dokumentbaserad app, är den allra första koden som OS X ska köras i en av följande återställningsmetoder som du måste skapa för din app, beroende på appdesignen:
-
Fönsterbaserade appar: (void) applicationDidFinishLaunching: (NSNotification *) aNotification
-
Dokumentbaserade appar: (void) windowControllerDidLoadNib: (NSWindowController *) windowController
En återuppringning är helt enkelt en metod som operativsystemet utför så småningom medan det försöker leverera eller hämta information från din app. Din ansökningskod kommer att utföra en metod för en kakaoklass där din app kommer att få möjlighet att ange namnet på en metod i en av dina klasser, för att bli kallad ett objekt av den klassen som din app också måste tillhandahålla.
A delegat är ett hjälparobjekt som en kakao-klass använder för att utöka klassens funktionalitet genom att låta dig implementera kod som kakao-klassen kommer att utföra under vissa omständigheter. En kakaoklass kontrollerar sitt delegatobjekt (om en har tilldelats) för huruvida delegaten ger ett genomförande av en specifik metod. Om delegaten har den metoden utför kakaoklassen den metoden. Om delegaten inte genomför den specifika metoden använder kakaoklassen antingen en egen standardmetod eller loggar ett fel. De flesta delegater måste införliva ett särskilt protokoll som bestämmer vilka metoder de kan genomföra. Kodens delegater måste använda implementeringsmetoderna från det specifika protokoll som delegaten förväntar sig.
Här är några av kakaoobjekten som kan använda delegater att utföra din kod:
-
NSTableView.NSTableView accepterar en delegat som följer NSTableViewDelegate-protokollet. Detta inkluderar 20-30 metoder som din apps delegatobjekt kan implementera för att stödja din apps behov av att veta vad NSTableView gör. Det finns metoder som kommer att ringas i din ansökan när den behöver veta och reagera på en handling, till exempel när en användare gör ett urval i tabellen eller när en kolumn ändras.
-
NSApplication. Du kan tilldela ett NSApplicationDelegate för att hantera några av de metoder som en NSApplication-förekomst (din ansökan) kommer att ta emot. Dessa metoder kan kallas strax före eller strax efter att din ansökan har utfört en annan metod så att din app kan förberedas.
-
NSWindow. En NSWindowDelegate som tilldelas en av dina programfönster ger din app chansen att svara på en storlek för användare, flyttning eller andra fönsterhändelser.
-
NSMenu. Du implementerar ett NSMenuDelegate för att stödja händelser som händer när en användare interagerar med menyer i din ansökan.
Icke-objektiv-C-ramar i Macintosh-program
Apple tillhandahåller många Macintosh-programutvecklingsramar (kodbibliotek) som din app kan ringa för att utföra de tusentals operationerna i OS X. Många av dessa ramar, som PDF Kit, består av mål-C-klasser, varifrån din app kan skapa och använda objekt inom dina program. Men några av dessa ramar är bara bibliotek av funktioner som din app kan utföra.
Exempelvis är CFNetwork Framework en uppsättning funktioner som din app kan använda för att utföra finjusterade nätverksanslutningar. NSURL-klassen ger en bra uppsättning grundläggande nätverksoperationer som är bra för att hämta data med en URL. Om din app kräver mer kontroll över de nätverkskommunikationer som den initierar måste du använda CFNetwork-ramen och dess funktioner. Du kan använda följande kod för att förbereda en HTTP-begäran för överföring till en specifik webbadress:
CFStringRef httpBody = CFSTR ("); CFStringRef headerFieldName = CFSTR (" Cookie "); // lägga till specifik cookie till HTTP-förfrågan 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 begäran = CFHTTPMessageCreateRequest (kCFAllocatorDefault, requestMethod, url, kCFHTTPVersion1_1) CFHTTPMessageSetBody (begäran httpBody); // lägga cookie CFHTTPMessageSetHeaderFieldValue (begäran headerFieldName, headerFieldValue) CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage (begäran),
När koden har Serialiserad begäran, din app kan sedan öppna en skrivström för att leverera begäran till dess destination.
Alla C-baserade Apple-ramar ger en uppsättning funktioner för att utföra denna typ av lägre nivå programmering. Din kod blir mer komplicerad, men Apple tillhandahåller inte Objective-C-klasser för alla dess ramar.Om du verkligen behöver funktionaliteten tillgänglig i en av de här ramarna är det här det enda sättet att nå dina appers mål. Följande ramar tillhandahåller inte mål-C-klasser:
-
Ljudverktygslådan
-
CFNetwork
-
Kärn MIDI
-
Kärntext
-
Katalogtjänst (som LDAP och Open Directory)
-
Säkerhet > Om du vill skapa appar som kan dra full nytta av funktionerna i OS X måste du vara redo att stödja användningen av icke-objektiv-C-kodbibliotek.
C ++-kod i Objective-C Macintosh-program
Objective-C ger objektorienterade funktioner för Macintosh-programutveckling, såsom arv och polymorfism. Språket är baserat på C-programmeringsspråket; Därför kan du använda din C programmeringskunskap för att koda inom Objective-C. Objective-C ++ är en bromekanism som tillåter objektiv-C-källmodulerna att fungera med Objective-C ++-klasser, som kan sammanställa och länka till C ++-kodbibliotek.
Följande enkla exempel på en kvadratisk matris visar innehållet i en C ++-headerfil för en Matrix-klass. Matrix-klassen levereras med standardkonstruktorn och destruktorn för en C ++-klass, och metoderna är vad du kan förvänta dig för ett grundläggande kvadratmatrisobjekt:
klassmatris {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;};
För att använda Objective-C ++ måste dina Objective-C ++-klassmoduler använda filtillägget. mm. Detta berättar för Xcodes kompilator att klassen ska sammanställas med Objective-C ++, vilket gör att din klass kan använda C ++ -språkiga sökord. Med hjälp av Objective-C ++ kan din app skapa ett Matrix-objekt för att utföra grundläggande operationer, till exempel att lägga till två Matrix-objekt tillsammans. Detta förutsätter att Objective-C ++-källmodulen har importerat C ++-matrisen. h-fil:
- (void) addTwoMatrices {Matrix matrixOne (3); // 3x3 matris MatrismatrisTwo (3); // annan int radIndex = 0; int colIndex = 0; för (rowIndex = 0; rowIndex <3; ++ rowIndex) {for (colIndex = 0; colIndex <3; ++ colIndex) {// sätt matrisen ena elementen till deras värden matrixOne. setElement (rowIndex, colIndex, XXX); // sätt matris två delar till några andra värden matrixTwo. setElement (rowIndex, colIndex, YYY);}} Matrix matrixSum = matrixOne + matrixTwo;
Med Objective-C ++ kan dina appar dra nytta av alla tillgängliga bibliotek från tredje part som är skrivna för C ++.