Objective-C

Objective-C ++ Modifier

Objective-C ++ est une variante de langue acceptée par l’interface de la collection GNU Compiler et de CLANG, qui peut compiler Fichiers de code source utilisant une combinaison de syntaxe C ++ et d’objections-c. Objective-C ++ ajoute à C ++ les extensions que l’objectif-C ajoute à C. Comme rien n’est fait pour unifier la sémantique des caractéristiques de plusieurs langues, il existe certaines restrictions:

  • Une sorte de C ++ ne peut pas dériver d’une classe Objective-C et vice versa.
  • C ++ Names Noms ne peut pas être déclaré dans une déclaration de l’objectif-C.
  • Déclarations objectives -C devrait apparaître globalement, pas dans une instruction C ++.
  • Les classes de l’objectif-C ne peuvent pas avoir de classes variables C ++ qui n’ont pas de constructeur par défaut ou n’ont une ou plusieurs méthodes virtuelles, mais c ++ Les pointeurs d’objets peuvent être utilisés comme des instances variables sans restriction (elles sont attribuées dans la méthode -Iil).
  • C ++ sémantique « par valeur » ne peut pas être appliqué aux objets d’Objective-C, qui ne sont accessibles que par des pointeurs.
  • une déclaration de l’objectif-C ne peut pas être NTO d’un modèle de déclaration C ++ et inversement. Toutefois, les types d’objectifs-c (tels que classname *) peuvent être utilisés comme paramètres de modèle C ++.
  • La manipulation des exceptions de l’objectif-C et C ++ est différente; Chaque langue ne peut gérer que ses propres exceptions. Ceci est atténué dans des versions récentes ou remplaçant complètement les exceptions d’objectif-C par des exceptions C ++ (telles que Apple) ou partiellement lorsque la bibliothèque Objective-C ++ est liée.
  • il doit y avoir prudent Étant donné que les appels vers le destructeur des exceptions d’exécution de l’objectif-C et C ++ ne correspondent pas (par exemple, un destroyer C ++ ne sera pas appelé lorsqu’une exception C objectif-C sort de la portée d’un objet C ++). Les nouvelles versions de 64 bits résolvent cela en introduisant une interopérabilité avec les exceptions de C ++ à cet égard.
  • blocks de l’objectif-c et C ++ Les lambords 11 sont des entités différentes, mais un bloc est généré de manière transparente sur Mac OS X Quand une Lambda est passée où un bloc est attendu.

Objective-C 2.0eDitatar

Lors de la conférence de développeurs mondiaux de 2006, Apple a annoncé le lancement de  » Objective-C 2.0 « , un examen du langage objectif-C à inclure » une collecte moderne des ordures, des améliorations de la syntaxe, une amélioration de l’exécution et un support pour 64 bits « . Mac OS X V10.5, lancé en octobre 2007, comprenait un compilateur Objective-C 2.0. GCC 4.6 prend en charge de nombreuses nouvelles applications Objective-C, telles que les propriétés déclarées et synthétisées, la syntaxe des points, l’énumération rapide, les méthodes de protocole facultatives, les attributs de la méthode / du protocole / de la classe, des extensions de classe et une nouvelle API de Gnunn Objective-C.

Vêtement de déchets

Objectif 2.0 avait un collecteur de déchets conservateurs en option. Lorsqu’il a été exécuté en mode de rétraction, il a modifié les opérations de comptage de référence telles que « Conserver » et « GRATUIT » dans NOPS (non-opérations, instruction de montage indiquant que le processeur n’a rien à faire). Tous les objets ont été soumis au collecteur des ordures lorsque la collecte des ordures a été activée. C Les pointeurs peuvent être qualifiés avec « __strong » pour causer l’interception de l’écriture du compilateur et participer ainsi à la collecte des ordures. Un faible sous-système de mise à zéro a également été fourni de manière à ce que les pointeurs marqués de « __wak » soient définis sur zéro lorsque l’objet (ou plus facilement, la mémoire du collecteur des ordures) est collectée. Le collecteur des ordures n’existait pas dans la mise en œuvre de l’objectif-C 2.0 d’IOS. La collecte des ordures dans l’objectif-C est exécutée dans un fil à faible priorité et peut arrêter les événements utilisateur, dans l’intention de maintenir l’expérience de l’utilisateur réceptif.

La collecte des ordures n’a jamais été disponible dans IOS en raison de problèmes de performance. Il a été méprisés dans la version 10.8 du système d’exploitation X en faveur du compte de référence automatique (en anglais: le comptage automatique de référence, l’ARC) et doit être supprimé dans une future version de OS X. Objective-C dans iOS 7 exécuté dans ARM64 USA 19 bits d’un mot de 64 bits pour stocker le nombre de références, tel qu’un formulaire de pointeur marqué.

ProtitierAtar

Objectif 2.0 Entrez une nouvelle syntaxe pour déclarer des variables d’instance en tant que propriétés, avec Attributs facultatifs pour configurer la génération de méthodes d’accès.Les propriétés sont, dans un certain sens, des variables d’instance publique; C’est-à-dire que la déclaration d’une variable d’instance en tant que propriété fournit des classes d’accès externes (éventuellement limitées, telles que la lecture juste) à cette propriété. Une propriété peut être déclarée « Readonly » (lecture seule) et peut être fournie avec la sémantique de stockage comme « Attribuer » (Attribuer), « Copier » (Copie) ou « Conserver » (Conserver). Par défaut, les propriétés sont considérées comme atomiques, ce qui entraîne une assurance pour empêcher plusieurs threads qui l’accédent en même temps. Une propriété peut être déclarée « nonatomic » (non atomique), qui élimine cette assurance.

« A4432de192 »>

Les propriétés sont implémentées Par le mot-clé @synthesize, qui génère les méthodes de getter (et le Setter, s’ils ne sont pas en lecture seule) selon la déclaration de propriété. Alternativement, les méthodes Getter et Setter doivent être explicitement implémentées, ou le mot clé @Dynamic peut être utilisé pour indiquer que les méthodes d’accès doivent être fournies par d’autres moyens. Lorsqu’il est compilé à l’aide de clang 3.1 ou plus, toutes les propriétés qui ne sont pas explicitement déclarées avec @dynamic ne sont pas cochées readonly ou ne disposent pas des méthodes complètes. implémenté par l’utilisateur getter et

« 83f4d150be »>

, sera automatiquement déclaré@synthesizeimplicitement.

@implementation Persona@synthesize nombre;-(id)iniciarConEdad:(int)edadInicial { self = ; if (self) { edad = edadInicial; // NOTA: asignación directo de la variable de instancia, no propiedad setter } return self;}-(int)edad { return edad;}@end

Les propriétés sont accessibles à l’aide de la syntaxe de passage de message traditionnelle, de note par points ou, dans la valeur de codage de clé, en utilisant /

/ setValue:forKey.

> de sorte que l’utilisation de la notation des points invoque les propriétés d’accès dans une méthode d’instance, le mot-clé « SOE » doit être utilisé:

Une classe ou des propriétés de protocole peut être introsprogée de manière dynamique.

int i;int contadorPropiedades = 0;objc_propiedad_t *listaPropiedades = clase_copiarListaPropiedades(, &contadorPropiedades);for (i = 0; i < contadorPropiedades; i++) { objc_propiedad_t *estaPropiedad = listaPropiedades + i; const char* nombrePropiedad = propiedad_getNombre(*estaPropiedad); NSLog(@"Persona tiene una propiedad: '%s'", nombrePropiedad);}

Les variables d’instance non fragile

Objective-C 2.0 Fournissez des variables d’instance non fragiles pris en charge par l’environnement d’exécution (par exemple, la création de code pour un système d’exploitation Mac X de 64 bits ainsi que le code pour tous iOS). Sous l’environnement d’exécution moderne, une couche supplémentaire de biais est ajoutée pour instancier les variables d’accès, permettant ainsi à la liaison dynamique d’ajuster le plan d’instanciation au moment de l’exécution. Cette propriété permet deux grandes améliorations dans le code de l’objectif-C:

  • élimine le problème de la fragilité des interfaces binaires – les superclasses peuvent modifier leur taille sans affecter la compatibilité binaire.
  • Permet aux variables d’instance qui fournissent une rétraction pour les propriétés peuvent être synthétisées au moment de l’exécution sans être déclarée dans l’interface de la classe.

Enumération rapide

au lieu d’utiliser un nsenumerateur Objet ou indiquant l’itération sur une collection, Objective-C 2.0 offre la syntaxe de dénombrement rapide. Dans l’objectif-C 2.0, les boucles suivantes sont équivalentes fonctionnellement, mais ont des fonctionnalités de performance différentes.

 » b75fda075a « >

La recensement rapide génère un code plus efficace que l’énumération standard, car les appels vers les méthodes de liste Les objets sont remplacés par l’arithmétique du pointeur à l’aide du protocole NsFasteMeration.

Stention gratuite

Une extension de classe a la même syntaxe que d’une déclaration de catégorie sans catégorie et les méthodes et les propriétés déclarées en elle sont ajoutées. directement à la classe main. Il est principalement utilisé comme alternative à une catégorie en ajoutant des méthodes à une classe sans les déclarer dans des en-têtes publics, avec l’avantage que pour les extensions de classe, le compilateur vérifie que toutes les méthodes fièrement déclarées sont réellement mises en œuvre.

BlockSeditar

Article principal: blocs (extension de la langue c)

blocs est une extension non standard pour l’objectif-C (ainsi que pour C et C ++) qui utilise une syntaxe Spécial pour créer des fermetures. Les blocs ne sont pris en charge que dans Mac OS X 10.6 « Snow Leopard » ou plus et dans IOS 4 ou plus, ainsi que dans Gnustep avec LibobJC2 1.7 et compilé avec Clang 3.1 ou plus.

#include <stdio.h>#include <Block.h>typedef int (^IntBlock)();IntBlock MakeCounter(int start, int increment) {__block int i = start;return Block_copy( ^ {int ret = i;i += increment;return ret;});}int main(void) {IntBlock mycounter = MakeCounter(5, 2);printf("First call: %d\n", mycounter());printf("Second call: %d\n", mycounter());printf("Third call: %d\n", mycounter());/* because it was copied, it must also be released */Block_release(mycounter);return 0;}/* Output:First call: 5Second call: 7Third call: 9*/

objectif moderne-céditatar

Comptage de référence automatiqueDitatar

Compte de référence automatique (Compte de référence automatique, Arc) est une fonction de temps de compilation qui élimine le besoin de programmeurs de sauvegarder manuellement des comptes à l’aide de retain et release Contrairement au collecteur des ordures, qui fonctionne au moment de l’exécution, l’ARC élimine la surcharge d’un processus distinct en gérant la rétention des comptes. L’arc et la manutention manuelle de la mémoire ne sont pas mutuellement exclusives; Les programmeurs peuvent continuer à utiliser aucun code ARC dans des projets qui ont été activés en désactivant l’arc pour les codes source individuels. XCode peut également essayer de mettre à jour automatiquement un projet à l’arc.

Literaleseditatar

Les environnements exécutifs suivants et Apple OBJ-C Il y a quelque temps un raccourci pour de nouvelles chaînes, en utilisant la syntaxe littéral @"una nueva cadena" et a également jeté les constantes de CorefOUTATION kCFBooleanTrue et kCFBooleanFalse par la variable NSNUmber avec des valeurs booléennes. Lorsque vous utilisez ce format, il est libéré au programmeur pour utiliser les méthodes les plus longues /div> ou similaires lors de certaines opérations.

Lorsque le compilateur Apple LLVM 4.0 est utilisé ou supérieur, vecteurs, dictionnels, dictionnaires et NUMÉROS (CLASSES NSAray, NSDictionary et NSNumber) peut également être créé à la place de la syntaxe littérale. des méthodes. Syntaxe littérale utilise le symbole @ combiné avec , {} ou

 » 439FA67bec « >

créer les classes susmentionnées, respectivement.

Exemple sans littéral:

NSArray *miVector = ;NSDictionary *miDiccionario1 = ;NSDictionary *miDiccionario2 = ;NSNumber *miNumero = ;NSNumber *miNumeroSuma = ;NSNumber *miNumeroBooleano = ;

Exemple avec littéraux:

NSArray *myVector = @;NSDictionary *miDiccionario1 = { @"llave" : unObjeto };NSDictionary *miDiccionario2 = { llave1: objeto1, llave2: objeto2 };NSNumber *miNumero = @{miInt};NSNumber *miNumeroSuma = @{2+3};NSNumber *miNumeroBooleano = @YES;

Cependant, contrairement aux chaînes littérales compilées en tant que constantes dans l’exécutable, ces littéraux sont compilés comme un code équivalent aux appels aux méthodes mentionnées ci-dessus. En particulier, dans la manipulation manuelle du nombre de références de mémoire, ces objets sont auto-bibéraires, ce qui nécessite des soins particuliers lorsque, par exemple, sont utilisés avec des variables de fonctions statiques ou d’autres types de variables globales.

souscrivingditar

Lorsque le compilateur Apple LLVM 4.0 ou supérieur, vecteurs et dictionnaires (classes NSArray et NSDictionary) peuvent être manipulés en utilisant Abscriptions. Les souscriptes peuvent être utilisées pour récupérer des valeurs d’index (vecteurs) ou des touches (dictionnaires) et des objets mutables peuvent également être utilisées pour définir des objets sur des index ou des clés. Dans le code, les souscriptes sont représentées à l’aide des supports .

Exemples sans souscription:

Exemples avec des sous-domestibles:

Syntaxe de l’objectif-C » moderne « (1997) Modifier

Après l’achat de la suivante d’Apple, plusieurs tentatives ont été faites pour rendre la langue davantage en ce qui concerne les autres langues existantes. L’une de ces tentatives était l’introduction de ce que l’on appelle « syntaxe moderne » au moment de l’objectif-c (par opposition à la syntaxe existante « classique »). Il n’y avait pas de changements dans le comportement réel, il s’agissait simplement d’une syntaxe alternative. L’invocation à une méthode a été faite de cette manière:

Et il est arrivé d’être écrit de cette manière:

objeto = init];;

De même, les déclarations sont devenues comme ceci:

-(void) primeraEtiq ( int param1, int param2 );

est comme ceci:

Cette syntaxe « moderne » n’est pas prise en charge dans les dialectes ObjectCtive-C actuel.

CompilereDitatar portable

Outre les implémentations de GCC / Suivant / Apple, qui Ajout de plusieurs extensions à la mise en oeuvre d’origine StepStone, il existe également une autre implémentation gratuite et ouverte de Compilateur d’objets protables appelé. L’ensemble des extensions implémentées par le compilateur d’objet portable diffère des implémentations GCC / NEXT / Apple; En particulier, il comprend des blocs similaires à ceux de SmallTalk pour Objective-C, tout en manquant de protocoles et de catégories, deux caractéristiques largement utilisées dans OpenStep et ses dérivés. Ensemble, POC représente une vieille étape, pré-ensuite, de l’évolution de la langue, simplement selon le livre de Brad Cox.

comprend également une bibliothèque d’exécution appelée objetpak, basé sur l’original ICPAK101 Bibliothèque de Cox (qui provient à son tour de la bibliothèque de la classe SmallTalk-80) et est radicalement différente de la Fondation OneStep.

Geos Objective-céditatar

Le système PC GEOS a utilisé un langage de programmation appelé Geos Objective-C ou Goc; Malgré son nom similaire, les deux langues sont similaires dans un concept global et par l’utilisation de mots-clés précédés de la signature @.

CLANGEDITAR

La suite de compilateur de clangs, une partie de Le projet LLVM, met en œuvre l’objectif-C ainsi que d’autres langues.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *