Video: Our Miss Brooks: Cow in the Closet / Returns to School / Abolish Football / Bartering 2024
Di Karl G. Kowalski
Lo sviluppo di applicazioni Macintosh richiede creatività, capacità di programmazione Objective-C, un po 'di pazienza e una buona dose di persistenza da implementare, perfezionare, e consegna la tua applicazione Macintosh in perfetto stato di funzionamento ai tuoi utenti. Sulla tua strada verso questa destinazione, incontrerai alcune sfide che metteranno alla prova le tue capacità di programmazione e di risoluzione dei problemi. Devi fare i conti con (tra le altre cose) usando i delegati per implementare i callback delle applicazioni; utilizzo di framework non Objective-C di Apple; e incorporando il codice C ++ nelle tue app.
Implementazione di callback in applicazioni Macintosh
Lo sviluppo di applicazioni Macintosh utilizza callback per consentire a Mac OS X di eseguire codice all'interno della propria app per operazioni specifiche. Se stai creando un'app standard per finestre o documenti basata su Macintosh, il primo codice che OS X eseguirà è uno dei seguenti metodi di callback che devi creare per la tua app, a seconda della progettazione dell'app:
-
App basate su finestra: (void) applicationDidFinishLaunching: (NSNotification *) aNotification
-
App basate su documenti: (void) windowControllerDidLoadNib: (NSWindowController *) windowController
Un callback è semplicemente un metodo che il sistema operativo esegue alla fine mentre sta tentando di fornire o recuperare informazioni dalla tua app. Il codice dell'applicazione eseguirà un metodo per una classe Cocoa in cui la tua app avrà l'opportunità di fornire il nome di un metodo di una delle tue classi, per essere chiamato su un oggetto di quella classe che la tua app dovrà anche fornire.
Un delegato è un oggetto helper, che viene utilizzato da una classe Cocoa per estendere le funzionalità della classe, consentendo di implementare il codice che la classe Cocoa eseguirà in determinate circostanze. Una classe Cocoa controlla l'oggetto delegato (se ne è stato assegnato uno) per stabilire se il delegato fornisce un'implementazione di un metodo specifico. Se il delegato ha quel metodo, la classe Cocoa esegue quel metodo; se il delegato non implementa tale metodo specifico, la classe Cocoa utilizza un metodo predefinito o registra un errore. La maggior parte dei delegati deve incorporare un particolare protocollo che determina quali metodi possono implementare; i delegati del codice devono utilizzare i metodi dell'attrezzo dal protocollo specifico che il delegato si aspetta.
Ecco alcuni degli oggetti Cocoa che possono utilizzare i delegati per eseguire il codice:
-
NSTableView.NSTableView accetta un delegato che obbedisce al protocollo NSTableViewDelegate. Ciò include da 20 a 30 metodi che l'oggetto delegato della tua app può implementare per supportare la necessità della tua app di sapere cosa sta facendo NSTableView. Esistono metodi che verranno chiamati nell'applicazione quando è necessario conoscere e reagire a un'azione, ad esempio quando un utente effettua una selezione nella tabella o quando una colonna viene ridimensionata.
-
NSApplication. È possibile assegnare un NSApplicationDelegate per gestire alcuni dei metodi che riceverà un'istanza NSApplication (l'applicazione). Questi metodi possono essere chiamati subito prima o subito dopo che l'applicazione esegue un altro metodo, in modo che la tua app possa essere preparata.
-
NSWindow. Un NSWindowDelegate assegnato a una finestra della tua applicazione darà alla tua app la possibilità di rispondere a un utente che sta ridimensionando, spostando o altri eventi della finestra.
-
NSMenu. Implementa un NSMenuDelegate per supportare eventi che si verificano quando un utente interagisce con i menu dell'applicazione.
Framework C non oggettivi in applicazioni Macintosh
Apple fornisce molti framework di sviluppo di applicazioni Macintosh (librerie di codici) che l'app può chiamare per eseguire le migliaia di operazioni in OS X. Molti di questi framework, come il PDF Kit, sono composti da classi Objective-C, da cui la tua app può creare e utilizzare oggetti all'interno delle tue applicazioni. Tuttavia, alcuni di questi framework sono solo librerie di funzioni che l'app può eseguire.
Ad esempio, il framework CFNetwork è un insieme di funzioni che l'app può utilizzare per eseguire connessioni di rete ottimizzate. La classe NSURL fornisce un buon set di operazioni di rete di base che sono ottime per il recupero dei dati utilizzando un URL. Se la tua app richiede più controllo sulle comunicazioni di rete avviate, dovrai utilizzare il framework CFNetwork e le sue funzioni. È possibile utilizzare il seguente codice per preparare una richiesta HTTP per la trasmissione a un URL specifico:
CFStringRef httpBody = CFSTR ("); CFStringRef headerFieldName = CFSTR (" Cookie "); // aggiungi cookie specifico alla richiesta HTTP 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"); richiesta CFHTTPMessageRef = CFHTTPMessageCreateRequest (kCFAllocatorDefault, requestMethod, url, kCFHTTPVersion1_1); CFHTTPMessageSetBody (richiesta, httpBody); // aggiunge il CFHTTPMessageSetHeaderFieldValue biscotto (richiesta, headerFieldName, headerFieldValue); CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage (richiesta);
Una volta che il codice ha la richiesta serializzata, la tua app può quindi aprire un flusso di scrittura per consegnare la richiesta alla sua destinazione.
Tutti i framework Apple basati su C forniscono un serie di funzioni per eseguire questo tipo di programmazione di livello inferiore. Il tuo codice diventerà più complicato, ma Apple non fornisce classi Objective-C per tutti i suoi framework.Se hai davvero bisogno della funzionalità disponibile in uno di questi framework, questo è l'unico modo per raggiungere gli obiettivi della tua app. I seguenti framework non forniscono classi Objective-C:
-
Casella degli strumenti audio
-
CFNetwork
-
Core MIDI
-
Core Text
-
Servizio directory (come LDAP e Open Directory)
-
Sicurezza > Se si desidera creare app che possano sfruttare appieno le funzionalità di OS X, è necessario essere pronti a supportare l'uso di librerie di codici non Objective-C.
Codice C ++ in Objective-C Applicazioni Macintosh
Objective-C fornisce funzionalità orientate agli oggetti per lo sviluppo di applicazioni Macintosh, come l'ereditarietà e il polimorfismo. La lingua è basata sul linguaggio di programmazione C; quindi, puoi usare le tue conoscenze di programmazione C per codificare all'interno di Objective-C. Objective-C ++ è un meccanismo di bridge che consente ai moduli sorgente di Objective-C di funzionare con le classi Objective-C ++, che possono compilare e collegare librerie di codici C ++.
Il seguente semplice esempio di matrice quadrata mostra il contenuto di un file di intestazione C ++ per una classe Matrix. La classe Matrix viene fornita con il costruttore e il distruttore standard per una classe C ++ ei metodi sono quelli che ci si aspetterebbe da un oggetto matrice matrice di base:
class Matrix {public: Matrix (int inSize); virtual ~ Matrix (); int getSize (void); int getDeterminant (void); void setElement (int inRow, int inCol, int inValue); int getElement (int inRow, int inCol); Operatore matrice + (const Matrix e inAddend); privato: int m_size; int [] [] m_elementi;};
Per utilizzare Objective-C ++, i moduli di classe Objective-C ++ devono utilizzare l'estensione del file. mm. Questo dice al compilatore di Xcode che la classe deve essere compilata usando Objective-C ++, che permetterà alla tua classe di usare parole chiave in linguaggio C ++. Usando Objective-C ++, la tua app potrebbe creare un oggetto Matrix per eseguire operazioni di base, come l'aggiunta di due oggetti Matrix insieme. Ciò presuppone che il modulo sorgente Objective-C ++ abbia # importato la matrice C ++. h file:
- (void) addTwoMatrices {Matrix matrixOne (3); // matrice 3x3 Matrix matrixTwo (3); // another int rowIndex = 0; int colIndex = 0; for (rowIndex = 0; rowIndex <3; ++ rowIndex) {for (colIndex = 0; colIndex <3; ++ colIndex) {// imposta gli elementi di matrix one ai loro valori matrixOne. setElement (rowIndex, colIndex, XXX); // imposta gli elementi di matrix two su altri valori matrixTwo. setElement (rowIndex, colIndex, YYY);}} Matrix matrixSum = matrixOne + matrixTwo;
Con Objective-C ++, le tue app sono in grado di sfruttare tutte le librerie di terze parti disponibili scritte per C ++.