• Català
  • Castellano
  • English


Noms de Classe en el Codi Font


En el codi font, els noms de classes poden utilitzarse en només dos contextes diferents. Aquests contextes reflecteixen la dualitat de rols d'una clase com un tipus de dades i com un objecte:

  • El nom de classe pot utilitzar-se com un nom de tipus per un tipus d'objecte. Per exemple:
    Rectangle * unObjecte;

    Aquí unObjecte està definit estàticament a un punter d'un Rectangle. El compilador l'espera per tenir la estructura de dades d'una intància de Rectangle i els mètodes d'instància definits i heredats per la classe Rectangle. La definició estàtica permet al compilador fer la comprovació de tipus millor i tenir un codi font més auto-documentat. Mireu "Permetent Comportaments Estàtics" per més detalls.

    Només les instàncies poden declarar-se estàticament; els objectes de classe no poden ser-ho, ja que no són membres d'una classe, sense comptar el pertanyer al tipus de classe Class.

  • Com el receptor en una expressió de missatge, el nom de classe es refereix a l'objecte de classe. Aquest ús s'ha mostrat en varis exemples anteriorment. El nom de classe pot existir només per l'objecte de classe com a receptor de missatge. En qualsevol altre context, preguntaries a l'objecte de classe per revelar el seu id (per enviar-li un missatge de classe). L'exemple de sota passa la classe Rectangle com un argument en un missatge isKindOfClass:
    if ( [unObjecte isKindOfClass:[Rectangle class]] )
    ...

    Això podria haver estat il·legal per simplificar l'ús del nom "Rectangle" com l'argument. El nom de la classe només pot ser un receptor.

    Si no saps el nom de la classe a l'hora de compilar però el tens com una cadena de caràcters a l'hora de l'execució, l'NSClassFromString() retornarà l'objecte de classe:

    NSString *nomDeClasse;
    ...
    if ( [unObjecte isKindOfClass:NSClassFromString(nomDeClasse)] )
    ...

    Aquesta funció retorn nil si la cadena passada no és un nom de classe vàlida.

 

Els noms de classes existeixen en el mateix espai de noms que les variables globals i els noms de les funcions. Una classe i una variables global no pot tenir el mateix nom. Els noms de classe són els únics noms amb visibilitat global a Objective-C.