Vidéo: iOS Tutorial (2019): How To Make Your First App 2025
Par Karl G. Kowalski
Le développement d'applications Macintosh nécessite de la créativité, des compétences de programmation Objective-C, de la patience et une bonne dose de persévérance pour mettre en œuvre, affiner, et livrez votre application Macintosh en bon état de fonctionnement à vos utilisateurs. Sur votre chemin vers cette destination, vous rencontrerez des défis qui testeront vos compétences en programmation et en résolution de problèmes. Vous devez vous attaquer (entre autres) à l'utilisation de délégués pour implémenter des rappels d'applications; utiliser des frameworks non-Objective-C d'Apple; et incorporer du code C ++ dans vos applications.
Implémentation des rappels dans les applications Macintosh
Le développement d'applications Macintosh utilise callbacks pour permettre à Mac OS X d'exécuter du code dans votre application pour des opérations spécifiques. Si vous créez une application standard basée sur une fenêtre ou un document Macintosh, le tout premier code exécuté par OS X est l'une des méthodes de rappel suivantes que vous devez créer pour votre application, en fonction de la conception de l'application:
-
Applications basées sur une fenêtre: (void) applicationDidFinishLaunching: (NSNotification *) aNotification
-
Applications basées sur un document: (void) windowControllerDidLoadNib: (NSWindowController *) windowController
Un callback est simplement un méthode que le système d'exploitation finit par exécuter pendant qu'il essaie de fournir ou de récupérer des informations à partir de votre application. Votre code d'application exécutera une méthode pour une classe Cocoa où votre application aura l'opportunité de fournir le nom d'une méthode de l'une de vos classes, à appeler sur un objet de cette classe que votre application devra également fournir.
Un délégué est un objet auxiliaire, utilisé par une classe Cocoa pour étendre la fonctionnalité de la classe en vous permettant d'implémenter du code que la classe Cocoa exécutera dans certaines circonstances. Une classe Cocoa vérifie son objet délégué (s'il en a été affecté) pour savoir si le délégué fournit une implémentation d'une méthode spécifique. Si le délégué a cette méthode, la classe Cocoa exécute cette méthode; Si le délégué n'implémente pas cette méthode spécifique, la classe Cocoa utilise sa propre méthode par défaut ou enregistre une erreur. La plupart des délégués doivent incorporer un protocole particulier qui détermine les méthodes qu'ils peuvent mettre en œuvre; Les délégués de votre code doivent utiliser les méthodes d'implémentation du protocole spécifique attendu par le délégué.
Voici certains des objets Cocoa qui peuvent utiliser des délégués pour exécuter votre code:
-
NSTableView.NSTableView accepte un délégué qui obéit au protocole NSTableViewDelegate. Cela inclut 20 à 30 méthodes que l'objet délégué de votre application peut implémenter pour prendre en charge le besoin de votre application de savoir ce que fait NSTableView. Il existe des méthodes qui seront appelées dans votre application quand elle a besoin de connaître et de réagir à une action, par exemple lorsqu'un utilisateur effectue une sélection dans la table ou lorsqu'une colonne est redimensionnée.
-
NSApplication. Vous pouvez affecter un NSApplicationDelegate pour gérer certaines des méthodes qu'une instance NSApplication (votre application) recevra. Ces méthodes peuvent être appelées juste avant ou juste après que votre application exécute une autre méthode, afin que votre application puisse être préparée.
-
NSWindow. Un NSWindowDelegate assigné à l'une des fenêtres de votre application donnera à votre application une chance de répondre à un changement d'utilisateur, à un déplacement ou à d'autres événements de fenêtre.
-
NSMenu. Vous implémentez un NSMenuDelegate pour prendre en charge les événements qui se produisent lorsqu'un utilisateur interagit avec les menus de votre application.
Cadres non Objective-C dans les applications Macintosh
Apple propose de nombreux frameworks de développement d'applications Macintosh (bibliothèques de code) que votre application peut appeler pour effectuer des milliers d'opérations sous OS X. Beaucoup de ces frameworks, tels que le PDF Kit, sont composés de classes Objective-C, à partir desquelles votre application peut créer et utiliser des objets dans vos applications. Cependant, certains de ces frameworks ne sont que des bibliothèques de fonctions que votre application peut exécuter.
Par exemple, l'infrastructure CFNetwork est un ensemble de fonctions que votre application peut utiliser pour effectuer des connexions réseau affinées. La classe NSURL fournit un bon ensemble d'opérations de réseau de base qui permettent d'extraire des données en utilisant une URL. Si votre application nécessite plus de contrôle sur les communications réseau qu'elle initie, vous devrez utiliser le framework CFNetwork et ses fonctions. Vous pouvez utiliser le code suivant pour préparer une requête HTTP pour la transmission vers une URL spécifique: Tous les frameworks Apple basés sur C fournissent un ensemble de fonctions pour effectuer ce type de programmation de niveau inférieur. Votre code sera plus compliqué, mais Apple ne fournit pas de classes Objective-C pour tous ses frameworks.Si vous avez réellement besoin de la fonctionnalité disponible dans l'un de ces frameworks, c'est la seule façon de réaliser les objectifs de votre application. Les frameworks suivants ne fournissent pas de classes Objective-C: Audio Toolbox CFNetwork Core MIDI Core Text Service d'annuaire (tel que LDAP et Open Directory) Sécurité > Si vous souhaitez créer des applications qui peuvent tirer pleinement parti des fonctionnalités d'OS X, vous devez être prêt à prendre en charge l'utilisation de bibliothèques de codes non-Objective-C. Code C ++ dans les applications Macintosh Objective-C Objective-C fournit des fonctionnalités orientées objet pour le développement d'applications Macintosh, telles que l'héritage et le polymorphisme. Le langage est basé sur le langage de programmation C; par conséquent, vous pouvez utiliser vos connaissances en programmation C pour coder dans Objective-C. Objective-C ++ est un mécanisme de pont qui permet aux modules sources Objective-C de fonctionner avec les classes Objective-C ++, qui pourraient compiler et lier avec les bibliothèques de code C ++. class Matrix {public: Matrix (int inSize); virtuel ~ Matrix (); int getSize (void); int getDeterminant (vide); void setElement (int dansRow, int inCol, int inValue); int getElement (int inRow, int inCol); Opérateur matriciel + (const Matrix & inAddend); private: int m_size; int [] [] m_elements;}; Pour utiliser Objective-C ++, vos modules de classe Objective-C ++ doivent utiliser l'extension de fichier. mm. Ceci indique au compilateur de Xcode que la classe doit être compilée en utilisant Objective-C ++, ce qui permettra à votre classe d'utiliser des mots-clés en langage C ++. En utilisant Objective-C ++, votre application pourrait créer un objet Matrix pour effectuer des opérations de base, telles que l'ajout de deux objets Matrix ensemble. Cela suppose que le module source Objective-C ++ a #importé la matrice C ++. h fichier: Avec Objective-C ++, vos applications peuvent tirer parti de toutes les bibliothèques tierces disponibles écrites pour C ++.
Une fois que votre code a été saisi la demande sérialisée, votre application peut alors ouvrir un flux d'écriture afin de livrer la demande à sa destination.
L'exemple simple suivant d'une matrice carrée montre le contenu d'un fichier d'en-tête C ++ pour une classe Matrix. La classe Matrix est fournie avec le constructeur et le destructeur standard pour une classe C ++, et les méthodes sont ce que vous attendez d'un objet de base de la matrice carrée:
- (void) addTwoMatrices {Matrix matrixOne (3); // matrice 3x3 matrice matriceTwo (3); // un autre int rowIndex = 0; int colIndex = 0; pour (rowIndex = 0; rowIndex <3; ++ rowIndex) {pour (colIndex = 0; colIndex <3; ++ colIndex) {// définir les éléments de la matrice à leurs valeurs matrixOne. setElement (rowIndex, colIndex, XXX); // Définit les éléments de la matrice deux sur d'autres valeurs matrixTwo. setElement (rowIndex, colIndex, YYY);}} Matrix matrixSum = matriceUn + matriceTwo;
