¿Qué representa el símbolo @ en Object-C?

Aprendo Object-C y sigo chocando con el símbolo @. Se usa en diferentes escenarios, por ejemplo, al comienzo de una cadena o para sintetizar métodos de acceso.

¿Qué significa el símbolo @ en Objective-C?

El carácter @ no se utiliza en identificadores C o C ++, por lo que se usa para introducir palabras clave de lenguaje Objective-C de una manera que no entre en conflicto con las palabras clave de otros idiomas. Esto permite que la parte “objetiva” del lenguaje se mezcle libremente con la parte C o C ++.

Por lo tanto, con muy pocas excepciones, cada vez que vea @ en algún código de Objective-C, estará viendo constructos de Objective-C en lugar de constructos C o C ++.

Las principales excepciones son id , Class , nil y Nil , que generalmente se tratan como palabras clave de lenguaje, aunque también pueden tener un typedef o #define detrás de ellas. Por ejemplo, el comstackdor realmente trata a id especialmente en términos de las reglas de conversión de tipo de puntero que aplica a las declaraciones, así como a la decisión de si genera o no barreras de escritura de GC.

Otras excepciones son in , out , inout , byref , bycopy y bycopy ; estos se utilizan como anotaciones de clase de almacenamiento en el parámetro del método y los tipos de devolución para hacer que los objetos distribuidos sean más eficientes. (Se convierten en parte de la firma de métodos disponible desde el tiempo de ejecución, que DO puede ver para determinar cómo serializar mejor una transacción). También existen los atributos dentro de @property declarations, copy , retain , assign , readonly , readwrite , nonatomic , getter y setter ; esos solo son válidos dentro de la sección de atributo de una statement @property .

Del tutorial de Objective-C: El símbolo @ , la razón por la que está en el frente de varias palabras clave:

Usar @ debería facilitar la instalación de un comstackdor de Objective-C en un comstackdor de C existente. Debido a que @ no es válido en ningún contexto en C excepto en un literal de cadena, el tokenizer (un paso simple y temprano en el comstackdor) podría modificarse para simplemente buscar el carácter @ fuera de una constante de cadena (el tokenizer entiende los literales de cadena , por lo que está en condiciones de distinguir esto). Cuando se encuentra @, el tokenizer colocaría el rest del comstackdor en el “modo Objective-C”. (El analizador Objective-C sería responsable de devolver el comstackdor al modo C normal cuando detecta el final del código Objective-C).

También cuando se ve delante de un literal de cadena, hace un NSString en lugar de un ‘char *’ en C.

De Macrumors: Tutorial de Objective-C , cuando está enfrente de la cadena literal:

También hay @ “” literales NSString. Es esencialmente una abreviatura del método de NSString + stringWithUTF8String.

El @ también agrega soporte unicode a las cadenas C.

Del manual :

Los marcos de Objective-C generalmente no usan cadenas estilo C. En cambio, pasan cadenas como objetos NSString.

La clase NSString proporciona un contenedor de objetos para cadenas que tiene todas las ventajas que cabría esperar, incluida la administración de memoria integrada para almacenar cadenas de longitud arbitraria, soporte para Unicode, utilidades de formato de estilo printf y más. Sin embargo, como tales cadenas se usan comúnmente, Objective-C proporciona una notación abreviada para crear objetos NSString a partir de valores constantes. Para usar esta abreviatura, todo lo que tiene que hacer es preceder a una cadena normal, comilla doble con el símbolo @, como se muestra en los ejemplos siguientes:

 NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];