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:
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.
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.