Mac-applikationsutveckling för LuckyTemplates Cheat Sheet

Macintosh-applikationsutveckling kräver kreativitet, Objective-C-programmeringskunskaper, lite tålamod och en trevlig portion uthållighet för att implementera, förfina och leverera din Macintosh-applikation i gott skick till dina användare. På väg till denna destination kommer du att stöta på några utmaningar som kommer att testa dina färdigheter i programmering och problemlösning. Du måste komma till rätta med att (bland annat) använda delegater för att implementera appcallbacks; använder icke-Objective-C ramverk från Apple; och införliva C++-kod i dina appar.

Implementera återuppringningar i Macintosh-applikationer

Macintosh-applikationsutveckling använder callbacks för att tillåta Mac OS X att exekvera kod i din app för specifika operationer. Om du skapar en vanlig Macintosh-fönster- eller dokumentbaserad app, är den allra första koden som OS X kommer att köra i en av följande callback-metoder som du måste skapa för din app, beroende på appens design:

  • Fönsterbaserade appar: (void)applicationDidFinishLaunching:(NSNotification*)aNotification

  • Dokumentbaserade appar: (void)windowControllerDidLoadNib:(NSWindowController*)windowController

En återuppringning är helt enkelt en metod som operativsystemet så småningom kör medan det försöker tillhandahålla eller hämta information från din app. Din applikationskod kommer att köra en metod för en Cocoa-klass där din app kommer att ha möjlighet att ange namnet på en metod för en av dina klasser, för att anropas på ett objekt i den klassen som din app också måste tillhandahålla.

En delegat är ett hjälpobjekt som en Cocoa-klass använder för att utöka klassens funktionalitet genom att tillåta dig att implementera kod som Cocoa-klassen kommer att köra under vissa omständigheter. En Cocoa-klass kontrollerar sitt delegatobjekt (om ett sådant har tilldelats) för om delegaten tillhandahåller en implementering av en specifik metod. Om delegaten har den metoden, kör Cocoa-klassen den metoden; om delegaten inte implementerar den specifika metoden, använder Cocoa-klassen 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 får implementera; din kods 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 för att exekvera din kod:

  • NSTableView. NSTableView accepterar en delegat som följer NSTableViewDelegate-protokollet. Detta inkluderar 20 till 30 metoder som din app delegatobjekt kan implementera för att stödja din apps behov av att veta vad NSTableView gör. Det finns metoder som kommer att anropas i din applikation när den behöver känna till och reagera på en åtgärd, till exempel när en användare gör ett val i tabellen eller när en kolumn ändras i storlek.

  • NSA-applikation. Du kan tilldela en NSApplicationDelegate att hantera några av de metoder som en NSApplication-instans (din ansökan) kommer att ta emot. Dessa metoder kan anropas precis innan eller strax efter att din applikation kör en annan metod, så att din app kan förberedas.

  • NSWindow. En NSWindowDelegate tilldelad ett av din applikations fönster ger din app en chans att svara på en användares storleksändring, flyttning eller andra fönsterhändelser.

  • NSMeny. Du implementerar en NSMenuDelegate för att stödja händelser som inträffar när en användare interagerar med menyer i din applikation.

Icke-Objective-C Frameworks i Macintosh-program

Apple tillhandahåller många ramverk för Macintosh-applikationsutveckling (kodbibliotek) som din app kan anropa för att utföra tusentals operationer i OS X. Många av dessa ramverk, som PDF-kitet, är sammansatta av Objective-C-klasser, från vilka din app kan skapa och använda objekt i dina applikationer. Vissa av dessa ramverk är dock bara bibliotek med funktioner som din app kan köra.

Till exempel är CFNetwork-ramverket en uppsättning funktioner som din app kan använda för att utföra finjusterade nätverksanslutningar. Klassen NSURL tillhandahåller en bra uppsättning grundläggande nätverksoperationer som är bra för att hämta data med hjälp av en URL. Om din app kräver mer kontroll över nätverkskommunikationen den initierar, måste du använda CFNetwork-ramverket 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 URL:

CFStringRef httpBody = CFSTR( " );
CFStringRef headerFieldName = CFSTR( "Cookie" ); // lägg till specifik cookie till HTTP-begäran
CFStringRef headerFieldValue = CFSTR( "loginID=mitt_användarnamn; lösenord=mitt_lösenord;" );
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( request, httpBody );
// lägg till kakan
CFHTTPMessageSetHeaderFieldValue( request, headerFieldName, headerFieldValue );
CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage( request );

När din kod har den serialiserade begäran kan din app öppna en skrivström för att leverera begäran till dess destination.

Alla de C-baserade Apple-ramverken tillhandahåller en uppsättning funktioner för att utföra den här typen av programmering på lägre nivå. Din kod kommer att bli mer komplicerad, men Apple tillhandahåller inte Objective-C-klasser för alla dess ramverk. Om du verkligen behöver den funktionalitet som finns tillgänglig i ett av dessa ramverk är det enda sättet du kan uppnå din app mål. Följande ramverk tillhandahåller inte Objective-C-klasser:

  • Ljudverktygslåda

  • CFNetwork

  • Core 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-Objective-C-kodbibliotek.

C++-kod i Objective-C Macintosh-program

Objective-C tillhandahåller objektorienterade funktioner för Macintosh-applikationsutveckling, såsom arv och polymorfism. Språket är baserat på programmeringsspråket C; därför kan du använda din C-programmeringskunskap för att koda inom Objective-C. Objective-C++ är en bryggmekanism som tillåter Objective-C-källmoduler att arbeta med Objective-C++-klasser, som kan kompilera och länka till C++-kodbibliotek.

Följande enkla exempel på en kvadratisk matris visar innehållet i en C++-huvudfil för en Matrix-klass. Matrix-klassen kommer med standardkonstruktorn och destruktorn för en C++-klass, och metoderna är vad du kan förvänta dig för ett grundläggande kvadratiskt matrisobjekt:

klass matris
{
offentlig:
    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 );
    Matrisoperator+( const Matrix& inAdddend );
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 talar om för Xcodes kompilator att klassen ska kompileras med Objective-C++, vilket gör att din klass kan använda C++-språknyckelord. Med Objective-C++ kan din app skapa ett Matrix-objekt för att utföra grundläggande operationer, som att lägga till två Matrix-objekt tillsammans. Detta förutsätter att källmodulen Objective-C++ har #importerat filen C++ Matrix.h:

- (void)addTwoMatrices
{
    Matrix matrixOne( 3 ); // 3x3 matris
    Matrix matrixTwo( 3 ); // annan
    int rowIndex = 0;
    int colIndex = 0;
    för (rowIndex=0; rowIndex<3; ++rowIndex)
    {
        för (colIndex=0; colIndex<3; ++colIndex)
        {
            // sätt matris ens element till deras värden
            matrixOne.setElement( rowIndex, colIndex, XXX );
            // ställ in matris tvås element till några andra värden
            matrixTwo.setElement( rowIndex, colIndex, YYY );
        }
    }
    Matris matrisSumma = matrisEn + matrisTvå;

Med Objective-C++ kan dina appar dra fördel av alla tillgängliga tredjepartsbibliotek skrivna för C++.


Snagit 2018 Recension Vad är nytt sedan version 13

Snagit 2018 Recension Vad är nytt sedan version 13

TechSmith Snagit är vårt favoritprogram för skärmdumpar och bildredigering. Kolla in de nya funktionerna i Snagit 2018!

8 onlineverktyg för att rita diagram och flödesscheman

8 onlineverktyg för att rita diagram och flödesscheman

Behöver du skapa diagram eller flödesscheman och vill inte installera extra programvara? Här är en lista över diagramverktyg online.

Kan Spotify inte spela den aktuella låten? Hur man fixar

Kan Spotify inte spela den aktuella låten? Hur man fixar

Att ha ett hus fullt av trådlöst uppkopplade enheter och streamingtjänster som Spotify är fantastiskt tills saker och ting inte fungerar och du hittar intressanta lösningar.

Vad är en NVMe M.2 SSD och hur snabb är den?

Vad är en NVMe M.2 SSD och hur snabb är den?

NVMe M.2 SSD är det senaste inom datorhårddiskteknik. Vad är det och hur snabbt är det jämfört med äldre hårddiskar och Solid State Drives (SSD)?

Sonos vs AirPlay: Varför jag valde AirPlay för Whole House Audio

Sonos vs AirPlay: Varför jag valde AirPlay för Whole House Audio

Sonos är den bästa lösningen för strömmande ljud från 400 $ för två högtalare. Men med rätt inställning kan AirPlay vara gratis. Låt oss granska detaljerna.

Google Backup and Sync App ersätter foton och Drive

Google Backup and Sync App ersätter foton och Drive

Google Backup and Sync är en ny app som synkroniserar till Foton och Drive. Läs vidare för att se hur det går mot OneDrive, Dropbox, Backblaze och Crashplan.

Cord Cutting: Recension av MyIPTV med SOPlayer

Cord Cutting: Recension av MyIPTV med SOPlayer

MyIPTV är en kabelklippningstjänst som använder SOPlayer-appen för flera plattformar och tillhandahåller tv, filmer och andra former av media för en betald

Logitech Upplyst Living-Room Keyboard K830

Logitech Upplyst Living-Room Keyboard K830

Logitech släppte nyligen sitt Illuminated Living-Room Keyboard K830 som är tänkt som en följeslagare för hemunderhållning. Här är vår recension av enheten.

CloudHQ uppdaterad: Snabbare synkronisering, redigera Dropbox-filer från Google Docs

CloudHQ uppdaterad: Snabbare synkronisering, redigera Dropbox-filer från Google Docs

Här är en titt på uppdateringen som nyligen släppts till CloudHQ och hur den fungerar. Läs vidare för att hitta mer.

Vad är OnePlus 6T Android-telefon?

Vad är OnePlus 6T Android-telefon?

OnePlus 6T är en Android-telefon av högsta kvalitet som säljs till rabatterat pris jämfört med Apple iPhone, Google Pixel 3 eller Samsung Galaxy S9.