Resum del Llenguatge Objective-C
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".
Continguts
Missatges
Tipus Definits
Derectives de Preprocessador
Directives del Compilador
Classes
Categories
Protocols Formals
Declaracins de Mètodes
Implementació de Mètodes
Convencions de Noms
Missatges
Les expressions de missatges estan tancades entre claus escairades:
[receptor missatge]
El receptor pot ser:
- Una variable o expressió que dona un objecte (inclòs la variables
self - Una nom de classe (indicant l'objecte de classe)
super(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.
Tipus Definits
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).
Directives del Preprocessador
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.
Directives del Compilador
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.
Classes
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
Categories
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
Protocols Formals
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:
- En una declaració, per incorporar altres protocols (mostrats anteriorment)
- En una declaració de classe o categoria, per adoptar el protocol ( com es mostra a "Classe" i a "Categories")
- En una especificació de tipus, per limitar el tipus d'objectes que s'ajusten al protocol
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
Declaració de Mètodes
Les següents convencions s'utilitzen en la declaració de mètodes:
- Un "+" precedeix les declaracions de mètodes de classe.
- Un "-" precedeix les declaracions de mètodes d'instà ncies.
- Els arguments es declaren després dels doble-punt (
. Normalment, una etiqueta descrivint l'argument precedeix el doble-punt. Ambdues etiquetes i els doble-punts es consideren part del nom del mètode. - L'argument i els tipus de retorn es declaren utilitzant la sintaxi de C per l'assignació de tipus.
- El tipus de retorn per defecte i el tipus d'argument pels mètodes són
id, nointcom passa a les funcions. (Tanmateix, el modificadorunsignedquan s'utilitza fora dels següents tipus sempre signifiquenunsigned int.)
Implementació de Mètodes
A cada implementació de mètode es passen dos arguments ocults:
- L'objecte receptor (
self). - El selector per al mètode (
_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.
Convencions de Noms
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:
- Una classe pot declarar mètodes amb els mateixos noms que mètodes en altres classes.
- Una classe pot declarar variables d'instà ncia amb els mateixos nomes que variables d'altres classes.
- Una mètode d'instà ncia pot tenir el mateix nom que un mètode de classe.
- Un mètode pot tenir el mateix nom que un variable d'instà ncia.
- Els noms de mètodes que comencen amb "_", un únic carà cter de guió baix, estan reservades per utilitzar-se per Apple.
De la mateixa manera, els protocols i categories de la mateixa classe tenen espais de noms protegits:
- Un protocol pot tenir el nom que una classe, una categoria, o qualsevol altre.
- Una categoria d'una classe pot tenir el mateix nom que una categoria d'una altra classe.
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.


