Mac-applikationsudvikling til LuckyTemplates Cheat Sheet

Macintosh-applikationsudvikling kræver kreativitet, Objective-C-programmeringsevner, en vis tålmodighed og en god portion vedholdenhed til at implementere, forfine og levere din Macintosh-applikation i god stand til dine brugere. På din vej til denne destination vil du støde på nogle udfordringer, som vil teste dine programmerings- og problemløsningsevner. Du skal have styr på (blandt andet) at bruge delegerede til at implementere app-callbacks; ved at bruge ikke-Objective-C rammer fra Apple; og inkorporering af C++-kode i dine apps.

Implementering af tilbagekald i Macintosh-applikationer

Macintosh-applikationsudvikling bruger tilbagekald til at tillade Mac OS X at udføre kode i din app til specifikke operationer. Hvis du opretter en standard Macintosh vindue- eller dokumentbaseret app, er den allerførste kode, som OS X vil udføre, i en af ​​følgende tilbagekaldsmetoder, du skal oprette til din app, afhængigt af appens design:

  • Vinduesbaserede apps: (ugyldig)applikationDidFinishLaunching:(NSNotification*)aNotifikation

  • Dokumentbaserede apps: (void)windowControllerDidLoadNib:(NSWindowController*)windowController

Et tilbagekald er simpelthen en metode, som operativsystemet til sidst udfører, mens det forsøger at levere eller hente oplysninger fra din app. Din applikationskode vil udføre en metode for en Cocoa-klasse, hvor din app vil have mulighed for at angive navnet på en metode i en af ​​dine klasser, for at blive kaldt på et objekt i den klasse, som din app også skal levere.

En delegat er et hjælpeobjekt, som en Cocoa-klasse bruger til at udvide klassens funktionalitet ved at tillade dig at implementere kode, som Cocoa-klassen vil udføre under visse omstændigheder. En Cocoa-klasse tjekker sit delegerede objekt (hvis et er blevet tildelt) for, om delegaten leverer en implementering af en specifik metode. Hvis den delegerede har denne metode, udfører Cocoa-klassen denne metode; hvis delegerede ikke implementerer den specifikke metode, bruger Cocoa-klassen enten sin egen standardmetode eller logger en fejl. De fleste delegerede skal inkorporere en bestemt protokol, der bestemmer, hvilke metoder de må implementere; din kodes delegerede skal bruge implementeringsmetoderne fra den specifikke protokol, som den delegerede forventer.

Her er nogle af de kakaoobjekter, der kan bruge delegerede til at udføre din kode:

  • NSTableView. NSTableView accepterer en delegeret, der adlyder NSTableViewDelegate-protokollen. Dette inkluderer 20 til 30 metoder, som din apps delegerede objekt kan implementere for at understøtte din apps behov for at vide, hvad NSTableView gør. Der er metoder, der vil blive kaldt i din applikation, når den skal kende og reagere på en handling, såsom når en bruger foretager et valg i tabellen, eller når størrelsen på en kolonne ændres.

  • NS-ansøgning. Du kan tildele en NSApplicationDelegate til at håndtere nogle af de metoder, som en NSApplication-instans (din ansøgning) vil modtage. Disse metoder kan kaldes lige før eller lige efter din applikation udfører en anden metode, så din app kan forberedes.

  • NSWindow. En NSWindowDelegate tildelt til et af din applikations vinduer vil give din app en chance for at reagere på en brugers størrelsesændring, flytning eller andre vinduesbegivenheder.

  • NSMenu. Du implementerer en NSMenuDelegate for at understøtte begivenheder, der sker, når en bruger interagerer med menuer i din applikation.

Ikke-Objective-C-rammer i Macintosh-applikationer

Apple leverer mange Macintosh-applikationsudviklingsframeworks (kodebiblioteker), som din app kan kalde for at udføre de tusindvis af operationer i OS X. Mange af disse frameworks, såsom PDF-kittet, er sammensat af Objective-C-klasser, hvorfra din app kan oprette og bruge objekter i dine applikationer. Nogle af disse rammer er dog blot biblioteker af funktioner, som din app kan udføre.

For eksempel er CFNetwork-rammen et sæt funktioner, som din app kan bruge til at udføre finjusterede netværksforbindelser. NSURL-klassen giver et godt sæt grundlæggende netværksoperationer, der er gode til at hente data ved hjælp af en URL. Hvis din app kræver mere kontrol over den netværkskommunikation, den starter, skal du bruge CFNetwork-rammeværket og dets funktioner. Du kan bruge følgende kode til at forberede en HTTP-anmodning til transmission til en bestemt URL:

CFStringRef httpBody = CFSTR( " );
CFStringRef headerFieldName = CFSTR( "Cookie" ); // tilføje specifik cookie til HTTP-anmodning
CFStringRef headerFieldValue = CFSTR( "loginID=mit_brugernavn; password=mit_adgangskode;" );
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 );
// tilføj cookien
CFHTTPMessageSetHeaderFieldValue( request, headerFieldName, headerFieldValue );
CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage( request );

Når din kode har den serialiserede anmodning, kan din app derefter åbne en skrivestrøm for at levere anmodningen til dens destination.

Alle de C-baserede Apple-frameworks giver et sæt funktioner til at udføre denne type programmering på lavere niveau. Din kode bliver mere kompliceret, men Apple leverer ikke Objective-C-klasser til alle dets rammer. Hvis du virkelig har brug for den funktionalitet, der er tilgængelig i en af ​​disse rammer, er dette den eneste måde, du kan nå din apps mål på. Følgende rammer giver ikke Objective-C-klasser:

  • Lydværktøjskasse

  • CFNetværk

  • Core MIDI

  • Kernetekst

  • Directory Service (såsom LDAP og Open Directory)

  • Sikkerhed

Hvis du vil oprette apps, der kan drage fuld fordel af funktionerne i OS X, skal du være klar til at understøtte brugen af ​​ikke-Objective-C kodebiblioteker.

C++-kode i Objective-C Macintosh-applikationer

Objective-C leverer objektorienterede funktioner til Macintosh-applikationsudvikling, såsom arv og polymorfi. Sproget er baseret på programmeringssproget C; derfor kan du bruge din C-programmeringsviden til at kode inden for Objective-C. Objective-C++ er en bromekanisme, der tillader Objective-C kildemoduler at arbejde med Objective-C++ klasser, som kunne kompilere og linke til C++ kodebiblioteker.

Det følgende simple eksempel på en kvadratisk matrix viser indholdet af en C++ header-fil for en Matrix-klasse. Matrix-klassen leveres med standardkonstruktøren og -destruktoren til en C++-klasse, og metoderne er, hvad du ville forvente for et grundlæggende kvadratisk matrixobjekt:

klasse Matrix
{
offentlig:
    Matrix( int inSize );
    virtuel ~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& inAdddend );
privat:
    int m_størrelse;
    int[][] m_elements;
};

For at bruge Objective-C++ skal dine Objective-C++ klassemoduler bruge filtypenavnet .mm. Dette fortæller Xcodes compiler, at klassen skal kompileres ved hjælp af Objective-C++, som vil give din klasse mulighed for at bruge C++ sprognøgleord. Ved at bruge Objective-C++ kan din app oprette et Matrix-objekt til at udføre grundlæggende handlinger, såsom at tilføje to Matrix-objekter sammen. Dette antager, at Objective-C++-kildemodulet har #importeret filen C++ Matrix.h:

- (ugyldig)tilføj ToMatricer
{
    Matrix matrixOne( 3 ); // 3x3 matrix
    Matrix matrixTo( 3 ); // en anden
    int rowIndex = 0;
    int colIndex = 0;
    for (rowIndex=0; rowIndex<3; ++rowIndex)
    {
        for (colIndex=0; colIndex<3; ++colIndex)
        {
            // sæt matrix ens elementer til deres værdier
            matrixOne.setElement( rowIndex, colIndex, XXX );
            // sæt matrix to's elementer til nogle andre værdier
            matrixTwo.setElement( rowIndex, colIndex, YYY );
        }
    }
    Matrix matrixSum = matrixOne + matrixTo;

Med Objective-C++ er dine apps i stand til at drage fordel af alle de tilgængelige tredjepartsbiblioteker skrevet til C++.


Snagit 2018 anmeldelse Hvad er nyt siden version 13

Snagit 2018 anmeldelse Hvad er nyt siden version 13

TechSmith Snagit er vores foretrukne screenshot- og billedredigeringssoftware. Tjek de nye funktioner i Snagit 2018!

8 onlineværktøjer til at tegne diagrammer og rutediagrammer

8 onlineværktøjer til at tegne diagrammer og rutediagrammer

Har du brug for at oprette diagrammer eller rutediagrammer og vil du ikke installere ekstra software? Her er en liste over online diagramværktøjer.

Kan Spotify ikke afspille den aktuelle sang? Sådan rettes

Kan Spotify ikke afspille den aktuelle sang? Sådan rettes

At have et hus fyldt med trådløst tilsluttede enheder og streamingtjenester som Spotify er fantastisk, indtil tingene ikke fungerer, og du finder interessante løsninger.

Hvad er en NVMe M.2 SSD, og ​​hvor hurtig er den?

Hvad er en NVMe M.2 SSD, og ​​hvor hurtig er den?

NVMe M.2 SSD er det seneste inden for computerharddiskteknologi. Hvad er det, og hvor hurtigt er det i forhold til ældre harddiske og Solid State Drives (SSD)?

Sonos vs. AirPlay: Hvorfor jeg valgte AirPlay til Whole House Audio

Sonos vs. AirPlay: Hvorfor jeg valgte AirPlay til Whole House Audio

Sonos er den perfekte streaming-lydløsning, der starter ved $400 for to højttalere. Men med den rigtige opsætning kan AirPlay være gratis. Lad os gennemgå detaljerne.

Google Backup and Sync App erstatter Fotos og Drev

Google Backup and Sync App erstatter Fotos og Drev

Google Backup and Sync er en ny app, der synkroniserer til Fotos og Drev. Læs videre for at se, hvordan det klarer sig i forhold til OneDrive, Dropbox, Backblaze og Crashplan.

Ledningsskæring: Gennemgang af MyIPTV med SOPlayer

Ledningsskæring: Gennemgang af MyIPTV med SOPlayer

MyIPTV er en kabelskæringstjeneste, der bruger SOPlayer-appen til flere platforme og leverer tv, film og andre former for medier til en betalt betaling

Logitech Oplyst Living-Room Keyboard K830

Logitech Oplyst Living-Room Keyboard K830

Logitech udgav for nylig sit Illuminated Living-Room Keyboard K830, der er tænkt som en hjemmeunderholdnings-ledsager. Her er vores anmeldelse af enheden.

CloudHQ Opdateret: Hurtigere synkronisering, Rediger Dropbox-filer fra Google Docs

CloudHQ Opdateret: Hurtigere synkronisering, Rediger Dropbox-filer fra Google Docs

Her er et kig på opdateringen, der for nylig blev udgivet til CloudHQ, og hvordan den fungerer. Læs videre for at finde mere.

Hvad er OnePlus 6T Android-telefonen?

Hvad er OnePlus 6T Android-telefonen?

OnePlus 6T er en førsteklasses flagskibskvalitet Android-telefon, som sælges med rabat i forhold til Apple iPhone, Google Pixel 3 eller Samsung Galaxy S9.