Pregunta

Estoy aprendiendo Objective-C y sigo encontrándome con el símbolo @.Se utiliza 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?

¿Fue útil?

Solución

El @ El carácter no se usa en identificadores de C o C++, por lo que se usa para introducir palabras clave del lenguaje Objective-C de una manera que no entre en conflicto con las palabras clave de otros lenguajes.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, estás viendo construcciones de Objective-C en lugar de construcciones de C o C++.

Las principales excepciones son id, Class, nil, y Nil, que generalmente se tratan como palabras clave del idioma, aunque también pueden tener una typedef o #define detrás de ellos.Por ejemplo, el compilador realmente trata id especialmente en términos de las reglas de conversión de tipos de puntero que se aplican a las declaraciones, así como a la decisión de generar barreras de escritura de GC.

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

Otros consejos

De Tutorial de Objective-C:El símbolo, la razón por la que aparece al principio de varias palabras clave:

El uso de @ debería facilitar la incorporación de un compilador de Objective-C a un compilador de C existente.Debido a que @ no es válido en ningún contexto en C excepto en un literal de cadena, el tokenizador (un paso temprano y simple en el compilador) podría modificarse para simplemente buscar el carácter @ fuera de una constante de cadena (el tokenizador entiende los literales de cadena). , por lo que está en condiciones de distinguirlo).Cuando se encuentra @, el tokenizer pondría el resto del compilador en "modo Objective-C". (El analizador Objective-C sería responsable de devolver el compilador al modo C regular cuando detecta el final del código Objective-C).

Además, cuando se ve delante de una cadena literal, crea una NSString en lugar de un 'char *' en C.

De Macrumores:Tutorial de Objective-C, cuando está delante de una cadena literal:

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

La @ también agrega soporte Unicode a las cadenas C.

Desde el manual:

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

La clase NSString proporciona un envoltorio de objetos para cadenas que tiene todas las ventajas que esperaría, incluida la gestión de memoria incorporada para almacenar cadenas de longitud arbitraria, soporte para unicode, utilidades de formato de estilo Printf y más.Sin embargo, debido a que 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 taquigrafía, todo lo que tiene que hacer es preceder una cadena normal y doble cotizada con el símbolo @, como se muestra en los siguientes ejemplos:

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top