Video: App ontwikkelaar - Hoe ontwikkel je een eigen app? 2024
Door Karl G. Kowalski
Macintosh applicatie-ontwikkeling vereist creativiteit, objectieve programmeervaardigheden, enig geduld en een mooie portie persistentie om te implementeren, te verfijnen, en lever je Macintosh-applicatie in goede werkende staat af aan je gebruikers. Op weg naar deze bestemming zul je een aantal uitdagingen tegenkomen die je programmeer- en probleemoplossende vaardigheden zullen testen. Je moet grip krijgen (onder andere) met behulp van afgevaardigden om applicatie-callbacks te implementeren; gebruik van niet-Objective-C frameworks van Apple; en C ++ -code opnemen in uw apps.
Terugbellen implementeren in Macintosh-toepassingen
De ontwikkeling van Macintosh-toepassingen gebruikt callbacks om Mac OS X in staat te stellen code uit te voeren binnen uw app voor specifieke bewerkingen. Als u een standaard Macintosh-venster- of documentgebaseerde app maakt, is de allereerste code die door OS X wordt uitgevoerd, afhankelijk van het app-ontwerp in een van de volgende callback-methoden die u voor uw app moet maken:
-
Window-gebaseerde apps: (ongeldig) applicationDidFinishLaunching: (NSNotification *) aNotification
-
Document-gebaseerde apps: (void) windowControllerDidLoadNib: (NSWindowController *) windowController
Een callback is gewoon een methode die het OS uiteindelijk uitvoert terwijl het probeert informatie uit uw app te leveren of op te halen. Uw toepassingscode voert een methode uit voor een Cocoa-klasse, waarbij uw app de mogelijkheid heeft om de naam van een methode van een van uw klassen op te geven, om te worden aangeroepen in een object van die klasse dat uw app ook moet bieden.
Een deelnemer is een helperobject dat een Cocoa-klasse gebruikt om de functionaliteit van de klasse uit te breiden door u in staat te stellen code te implementeren die de Cocoa-klasse in bepaalde omstandigheden zal uitvoeren. Een Cocoa-klasse controleert zijn gedelegeerde object (als er een is toegewezen) of de gedelegeerde een implementatie van een specifieke methode biedt. Als de deelnemer deze methode heeft, voert de Cocoa-klasse die methode uit; als de deelnemer deze specifieke methode niet implementeert, gebruikt de Cocoa-klasse een eigen standaardmethode of logt een fout in. De meeste deelnemers moeten een bepaald -protocol opnemen dat bepaalt welke methoden ze kunnen implementeren; de gedelegeerden van uw code moeten de implementatiemethoden gebruiken van het specifieke protocol dat de gedelegeerde verwacht.
Hier zijn enkele Cocoa-objecten die deelnemers kunnen gebruiken om uw code uit te voeren:
-
NSTableView.De NSTableView accepteert een deelnemer die het protocol NSTableViewDelegate gehoorzaamt. Dit omvat 20 tot 30 methoden die het delegatieobject van uw app kunnen implementeren om de behoefte van uw app te ondersteunen om te weten wat de NSTableView aan het doen is. Er zijn methoden die in uw toepassing worden aangeroepen wanneer deze moeten weten en reageren op acties, zoals wanneer een gebruiker een selectie in de tabel maakt of wanneer de grootte van een kolom wordt gewijzigd.
-
NSApplication. U kunt een NSApplicationDelegate toewijzen om enkele van de methoden te verwerken die een NSApplication-instantie (uw toepassing) zal ontvangen. Deze methoden kunnen worden aangeroepen vlak voor of net nadat uw toepassing een andere methode heeft uitgevoerd, zodat uw app kan worden voorbereid.
-
NSWindow. Een NSWindowDelegate dat is toegewezen aan een van de vensters van uw toepassing geeft uw app de kans om te reageren op de grootte van een gebruiker, het verplaatsen of andere venstergebeurtenissen.
-
NSMenu. U implementeert een NSMenuDelegate om gebeurtenissen te ondersteunen die plaatsvinden wanneer een gebruiker communiceert met menu's in uw toepassing.
Niet-objectieve C-frameworks in Macintosh-toepassingen
Apple biedt veel Macintosh-toepassingsontwikkelingskaders (codebibliotheken) die uw app kan gebruiken om de duizenden bewerkingen in OS X uit te voeren. Veel van deze frameworks, zoals de PDF Kit, zijn samengesteld uit Objective-C klassen, van waaruit uw app objecten binnen uw toepassingen kan maken en gebruiken. Sommige van deze frameworks zijn echter alleen bibliotheken met functies die uw app kan uitvoeren.
Het CFNetwork-framework is bijvoorbeeld een reeks functies die uw app kan gebruiken om nauwkeurig afgestemde netwerkverbindingen uit te voeren. De klasse NSURL biedt een goede set basisnetwerkbewerkingen die uitstekend geschikt zijn voor het ophalen van gegevens met behulp van een URL. Als uw app meer controle vereist over de netwerkcommunicatie die deze initieert, moet u het CFNetwork-framework en de bijbehorende functies gebruiken. U kunt de volgende code gebruiken om een HTTP-verzoek voor verzending naar een specifieke URL voor te bereiden:
CFStringRef httpBody = CFSTR ("); CFStringRef headerFieldName = CFSTR (" Cookie "); // specifieke cookie aan HTTP-aanvraag toevoegen CFStringRef headerFieldValue = CFSTR ("loginID = mijn_gebruikersnaam; wachtwoord = mijn_wachtwoord;"); 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 (aanvraag, httpBody); // toe te voegen van de cookie CFHTTPMessageSetHeaderFieldValue (aanvraag, headerFieldName, headerFieldValue); CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage (aanvraag);
Zodra uw code heeft het seriedragende verzoek kan uw app vervolgens een schrijfstroom openen om het verzoek naar zijn bestemming te bezorgen.
Alle op C gebaseerde Apple-frameworks bieden een reeks functies voor het uitvoeren van dit type programmering op een lager niveau. Uw code zal ingewikkelder worden, maar Apple biedt geen objectief-C klassen voor al zijn kaders.Als u echt de functionaliteit nodig heeft die beschikbaar is in een van deze frameworks, is dit de enige manier om de doelen van uw app te bereiken. De volgende frameworks bieden geen Objective-C-klassen:
-
Audio Toolbox
-
CFNetwerk
-
Core MIDI
-
Core-tekst
-
Directoryservice (zoals LDAP en Open Directory)
-
Beveiliging > Als u apps wilt maken die optimaal gebruik kunnen maken van de functies van OS X, moet u klaar zijn om het gebruik van niet-objectief-C-codebibliotheken te ondersteunen.
C ++ -code in Objective-C Macintosh-toepassingen
Objective-C biedt objectgeoriënteerde functies voor de ontwikkeling van Macintosh-toepassingen, zoals overerving en polymorfisme. De taal is gebaseerd op de programmeertaal C; daarom kunt u uw C programmeerkennis gebruiken om te coderen in Objective-C. Objective-C ++ is een brugmechanisme waarmee Objective-C-bronmodules kunnen werken met Objective-C ++ -klassen die kunnen compileren en koppelen met C ++-codebibliotheken.
Het volgende eenvoudige voorbeeld van een vierkante matrix toont de inhoud van een C ++ header-bestand voor een Matrix-klasse. De klasse Matrix wordt geleverd met de standaardconstructor en destructor voor een klasse C ++, en de methoden zijn wat u zou verwachten voor een standaard vierkante matrixobject:
klasse Matrix {public: Matrix (int inSize); virtuele ~ Matrix (); int getSize (void); int getDeterminant (void); void setElement (int inRow, int inCol, int inValue); int getElement (int in Row, int inCol); Matrix-operator + (const Matrix & in Addend); privé: int m_size; int [] [] m_elements;};
Om Objective-C ++ te gebruiken, moeten uw objectief-C ++-klassenmodules de bestandsextensie gebruiken. mm. Dit vertelt de Xcode-compiler dat de klasse moet worden gecompileerd met behulp van Objective-C ++, waardoor uw klas C ++ -taalzoekwoorden kan gebruiken. Met Objective-C ++ kan uw app een Matrix-object maken om basisbewerkingen uit te voeren, zoals het samenvoegen van twee Matrix-objecten. Dit veronderstelt dat de Objective-C ++ bronmodule # de C ++ Matrix heeft geïmporteerd. h bestand:
- (void) addTwoMatrices {Matrix matrixOne (3); // 3x3 matrix MatrixmatrixTwee (3); // een andere int rowIndex = 0; int colIndex = 0; for (rowIndex = 0; rowIndex <3; ++ rowIndex) {for (colIndex = 0; colIndex <3; ++ colIndex) {// zet de elementen van matrix one naar hun waarden matrixOne. setElement (rowIndex, colIndex, XXX); // stel matrix twee's elementen in op enkele andere waarden matrixTwo. setElement (rowIndex, colIndex, YYY);}} Matrix matrixSum = matrixOne + matrixTwo;
Met Objective-C ++ kunnen uw apps profiteren van alle beschikbare bibliotheken van derden die zijn geschreven voor C ++.