L'Objective-C afegeix un petit número de construccions al llenguatge C i defineixen un munt de convencions per interacturar de forma efectiva amb el sistema d'execució. Aquest apèndix llista tots els afegits al llenguatge però no hi entra en detall. Per més informació, mireu "El Llenguatge Objective-C". Per una presentació més formal de la sintàxi de l'Objective-C mireu "Gramàtica pel Llenguatge Objective-C".
Missatges
Tipus Definits
Derectives de Preprocessador
Directives del Compilador
Classes
Categories
Protocols Formals
Declaracins de Mètodes
Implementació de Mètodes
Convencions de Noms
Les expressions de missatges estan tancades entre claus escairades:
[receptor missatge]
El receptor pot ser:
selfsuper (indicant una alternativa de búsqueda per la implementació del mètode)
El missatge és el mateix que un mètodes més alguns arguments que se li passen.
Els principals tipus utilitzats en Objective-C estan definits a objc/objc.h. Aquests són:
Tipus Definició idUn objecte (un punter a la seva estructura de dades). ClassUn objecte de Classe (un punter a la estructura de dades de classe). SELUn selector, un codi assignat pel compilador que identifica un nom de mètode. IMPUn punter a una implementació d'un mètode que retorna un idBOOLUn valor Booleà, pot ser YES o NO.
l'id pot utilitzar-se per qualsevol varietat de tipus d'objecte, classe o instància. A demés, els noms de classe poden utilitzar-se com a noms de tipus per estàticament indicar el tipus de les instàncies d'una classe. La definició estàtica del tipus d'instància es declara per ser un punter a la seva classe o a qualsevol classe que hi heredi.
El fitxer de capçalera objc.h també defineix alguns termes utilitzats:
Tipus Definició nilUn punter d'objectge nul, (id)0.NilUn punter d'objecte classe, (Class).
El preprocessador enten aquestes notacions especials:
Notació Definició #importImporta un fitxer de capçalera. Aquesta directiva és idèntica a #include, excepte que no inclou el mateix fitxer més d'un cop.//Comença un compentari que continua fins al final de la linia.
Les directives del compilador comencen amb "@". Les següents directives s'utilitzen per declarar i definir classes, categories i protocols:
Directiva Definició @interfaceCompença la declaració d'una classe o interfície de categoria. @implementationComença la definició d'una classe o categoria. @protocolComença la declaració d'un protocol formal. @endFinalitza la declaració/definició d'una classe, categoria, o protocol.
Les següents directives mutuament excloents especifiquen la visibilitat de les variables de la instànci:
Directiva Definició @privateLimita l'àmbit d'una variable a la classe que el declara. @portectedLimita l'àmbit de la variable a les classes que la declaren i hereves. @publicElimina les restriccions en l'àmbit de les variables.
Per defecte és @protected.
Aquestes directives suporten la captura d'excepcions:
Directiva Definició @tryDefineix un bloc dins el que les excepcions poden ser capturade. @throwTransmet una excepció. @catch()Captura una excepció llençada dins del block @tryprecedent.@finallyDefineix un bloc de codi que s'executa si les excepcions s'han enviat o no en el bloc @tryprecedent.
A demés, hi ha directives per aquestes situacions particulars:
Directiva Definició @classDeclara els nomes de les classes definides en algun lloc. @selector (mètode)Retorna el selector compilat que identifica el mètode. @protocol (nom)Retorna el protocol nom (una instància de la classe Protocol). ( @protocoltambé és vàlid sense (nom) per enviar declaracions).@encode (spec)Cedeix una cadena de caràcters que codifica una estructura de tipus spec. @defs (nom_classe)Cedeix l'estructura interna de dades de les instàncies nom_classe. @"string1"Defineix una constant d'objecte NSString en el mòdul actual i l'inicialitza amb l'strig codificat en 7 bits ASCII. @"string1"string2
@"" ...stringN
@""Defineix una constant d'objecte NSString en el mòdul actual. L'string creat és el resultat de la concatenació dels estrings especificats en les dues directives. @synchronized ()Defineix un bloc de codi que només pot executar-se a la vegada per un fil.
Una classe nova és declara amb la directiva @interface. El fitxer d'interfície per aquesta superclasse ha d'importar-se:
#import "EsUnaSuperclasse.h"
@interface NomClasse : EsUnaSuperclasse < llista de protocols >
{
declaració de variables d'instància
}
declaració de mètodes
@end
Totes, excepte les directives del compilador i el nom de la classe són opcionals. Si el doble-punt i el nom de la superclasse són omeses, la classe és declarada per ser una nova classe arrel. Si alguns protocols es llisten, els fitxers de capçalera on estiguin declarats també s'hauran d'importar.
Un fitxer que contingui una definició de classe importa la seva pròpia interfície:
#import “NomClasse.hâ€?
@implementation NomClasse
Definicions de mètodes
@end
Una categoria es declara de forma molt semblant a una classe. El fitxer de la interfície que declara la classe ha d'importar-se:
#import "NomClasse.h"
@interface NomClasse ( NomCategoria ) < llista de protocols >
declaracions de mètodes
@end
La llista de protocols i les declaracions de mètodes són opcionals. Si algún protocol és llistat, els fitxers de capçalera on estan declarats també hauran d'importar-se.
Com en la definició de la classe, un fitxer que conté una definició de categoria importa la seva pròpia interfície:
#import "NomCategoria.h"
@implementation NomClasse ( NomCategoria )
definicions de mètodes
@end
Els protocols formals estan declarats utilitzant la directiva @protocol:
@protocol NomProtocol < llista de protocols >
declaracions de mètodes
@end
La llista de protocols incorporats i de declaració de mètodes són opcionals. El protocol ha d'importar els fitxers de capçalera que declara qualsevol protocol que hi incorpora.
Pots crear una començament de referència d'un protocol utilitzant la directiva @protocol() de la següent manera:
@protocol NomProtocol;
Dins el codi font, els protocols es refereixen utilitzant la directiva similar @protocol(), on els parèntesi tanquen els noms del protocol.
El noms de protocols llistats dins de les claus en angle (<...>) s'utilitzen per fer tres coses diferents:
Dins les declaracions del protocol, aquests quanlificadors de tipus suporten els missatges remots:
Qualificador de Tipus Definició onewayEl mètode és per missatges asincrons i no és vàlid un tipus de retorn. inEls arguments passa informació pel receptor remot. outEls arguments obtenen informació retornada per referència. inoutAmbdos arguments passen informació i obtenen informació. bycopyUna copia de l'objecte, no un apoderat, ha de passar-se o retornar-se. byrefUna referència a l'objecte, no una copia, ha de passar-se o retornar-se
Les següents convencions s'utilitzen en la declaració de mètodes:
. Normalment, una etiqueta descrivint l'argument precedeix el doble-punt. Ambdues etiquetes i els doble-punts es consideren part del nom del mètode.id, no int com passa a les funcions. (Tanmateix, el modificador unsigned quan s'utilitza fora dels següents tipus sempre signifiquen unsigned int.)A cada implementació de mètode es passen dos arguments ocults:
self)._cmd).
Dins la implementació, tant self com super es refereixen a l'objecte receptor. super substitueix self com a receptor d'un missatge per indicar que només els mètode heredats per la implementació poden ser executats en resposta al missatge.
Els mètodes amb cap altre retorn normalment vàlid retornen void.
Els noms de fitxers que contenen codi Objective-C tenen la extensió .m. Els fitxers que declaren les interfícies de classe i categoria o que declaren protocols tenen la extensió .h normal en fitxers de capçalera.
Els noms de classe, categoria, i protocols normalment comencen amb un lletra en majuscula; els noms de mètodes i variables d'instància normalment comencen amb una lletra en minuscula. Els noms de variables que mantenen instàncies normalment també comencen amb lletres minuscules.
En Objective-C, els noms idèntics que tenen propòsits diferents no es molesten. Dins una classe, els noms poder assignar-se lliurement:
De la mateixa manera, els protocols i categories de la mateixa classe tenen espais de noms protegits:
Tanmateix, els noms de classes estan en el mateix espai de noms que les variables globlas i els tipus definits. Un programa no pot tenir una variables globar amb el mateix nom que una classe.