Cuando abres código Objective-C por primera vez, hay algo que llama tu atención de inmediato.
Es la arroba (@), que aparece por todas partes.
Se escriben @interface, @property e incluso las cadenas como @“Hello”. Al principio puedes pensar: «¿Esto no es un error tipográfico?»
Sin embargo, esta @ tiene una razón muy clara.
En Objective-C, @ indica al compilador: «A partir de aquí no es C puro, sino sintaxis de extensión de Objective-C».
Hoy veremos de forma sencilla por qué esta arroba aparece igual en @interface, @property y @“cadenas”.
¿Qué es exactamente la @ de Objective-C?
Empecemos por lo esencial.
@ es un símbolo especial que indica al compilador: «Esta es sintaxis propia de Objective-C».
Para entenderlo, hay que conocer el origen de Objective-C.
Objective-C no es un lenguaje completamente nuevo. Es un lenguaje que añade funciones orientadas a objetos sobre C.
Es decir, incluye C al 100 % y le incorpora funciones como clases y mensajes.
Pero aquí surge un problema.
Desde el punto de vista del compilador, hay que distinguir qué pertenece a la sintaxis original de C y qué corresponde a la nueva sintaxis de Objective-C.
El marcador que traza esa frontera es precisamente @.
¿Por qué se eligió la arroba (@)?
También existen el asterisco (*) y la almohadilla (#), así que ¿por qué usar precisamente @?
La respuesta es sorprendentemente práctica.
En la sintaxis estándar de C, el símbolo @ no se utiliza en ninguna parte.
Recordemos los caracteres que se usan en C.
- Nombres de variables y funciones: letras, números y guion bajo (_)
- Operadores: +, -, *, /, =, &, etc.
- Preprocesador: # (por ejemplo, #include)
@ no aparece en ninguna parte de esta lista.
Por eso los creadores de Objective-C adoptaron @. Era un símbolo seguro que nunca entraría en conflicto con el código C existente.
Si hubieran usado la palabra interface como palabra clave en lugar de @, todo el código C existente que utilizara una variable llamada interface se habría roto.
Anteponer @ evita ese tipo de conflicto desde el principio.
En pocas palabras, @ es como el tirador de un cajón separado donde se guarda la sintaxis exclusiva de Objective-C.
Por qué @interface, @property y @“cadenas” empiezan todas con @
Ahora llegamos al punto principal. Veamos por qué estas tres construcciones, que parecen distintas, empiezan exactamente con @.
La conclusión es que las tres son funciones exclusivas de Objective-C que no existen en C.
Veámoslas una por una.
@interface — Una directiva que abre el esqueleto, o declaración, de una clase. Como C no tiene el concepto de clase, había que marcarlo con @. @implementation y @end, sus parejas, existen por el mismo motivo.
@property — Una función que crea automáticamente la propiedad de un objeto. Como esta sintaxis tampoco existe en C puro, lleva @.
@“cadenas” — Este es el caso más interesante. «Hello» entre comillas y @“Hello” son objetos completamente distintos.
Comparémoslos en una tabla.
| Categoría | “Hello” | @“Hello” |
|---|---|---|
| Qué es | Matriz de caracteres al estilo C | Objeto NSString |
| Pertenencia | Sintaxis original de C | Extensión de Objective-C |
| Función | Una simple secuencia de caracteres | Permite usar métodos como length |
Al añadir una sola @ antes de las comillas, un simple bloque de texto se convierte en un «objeto».
Por eso hace falta @. Es como decir: «Crea esta cadena como un objeto NSString, no como una cadena C normal».
En resumen:
Ya sea @interface, @property o @“cadenas”, todas usan la misma marca @ porque son funciones que no existen en C y son exclusivas de Objective-C.
Una vista rápida con código
Explicarlo solo con palabras puede resultar algo abstracto, así que he preparado un ejemplo breve.
A continuación se muestra una declaración de clase sencilla. Observa cómo @ envuelve la sintaxis de Objective-C.
@interface Person : NSObject // Inicio de la declaración de clase (CSintaxis inexistente en C)
@property NSString *name; // Generación automática de propiedades
@end // Fin de la declaración
NSString *greeting = @"Hola"; // Antes de las comillas @ → NSString Objeto
Como puedes ver, todas las líneas que empiezan con @ son funciones añadidas por Objective-C.
En cambio, las partes sin @ son sintaxis heredada directamente de C.
Así, con solo comprobar si hay @, puedes distinguir enseguida: «Ah, esto es una extensión de Objective-C».
Preguntas frecuentes (Q&A)
P. ¿@ es lo mismo que el # del preprocesador?
No. El # de #include es una directiva del preprocesador que se procesa antes de compilar. En cambio, @ es una directiva del compilador de Objective-C que el compilador interpreta directamente, por lo que cumplen funciones distintas.
P. ¿Hay muchos más tipos de @ además de estos?
Sí, bastantes: @protocol, @selector, @try/@catch y @autoreleasepool, entre otros. Con la sintaxis moderna también puedes crear fácilmente arrays con @[], diccionarios con @{} e incluso objetos numéricos como @42.
P. Swift también tiene @, ¿verdad?
Exacto. Sin embargo, su significado es algo distinto. En Swift, @ se usa principalmente para marcar atributos, como @State y @IBOutlet. El origen es similar, pero sus usos deben distinguirse.
Las arrobas que aparecen en cada parte del código pueden resultar extrañas, pero cuando entiendes que son la «frontera entre C y Objective-C», empiezan a resultar familiares.
Seguir las @ permite ver claramente dónde comienza la sintaxis orientada a objetos. Si recuerdas esta perspectiva al leer código Objective-C, todo será mucho más fácil. ¡Que disfrutes programando!

