2008-08-25 15 views
134

Estoy aprendiendo Objective-C y sigo topando con el símbolo @. Se usa en diferentes escenarios, por ejemplo, al comienzo de una cadena o para sintetizar métodos de acceso.¿Qué representa el símbolo @ en objetivo-c?

¿Qué significa el símbolo @ en objective-c?

+0

qué @ se utiliza antes y @interface @ ¿fin? –

Respuesta

153

El carácter @ no se utiliza en C o identificadores de C++, por eso 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, está buscando construcciones de Objective-C en lugar de C o C++.

Las principales excepciones son id, Class, nil, y Nil, que generalmente son tratados como palabras clave del lenguaje a pesar de que también pueden tener un 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 tipo de puntero que aplica a las declaraciones, así como también a la decisión de generar barreras de escritura GC.

Otras excepciones son in, out, inout, oneway, byref, 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 del método disponible desde el tiempo de ejecución, lo que hacemos puede mirar 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 solo son válidos dentro de la sección de atributo de una declaración @property.

+2

¿Puedes explicar algo sobre lo que hace @ (expresión)? Es el único elemento que no entiendo en la ventana emergente que se muestra cuando escribo @ en xcode. – jchnxu

+6

@ (99) es lo mismo que [NSNumber numberWithInteger: 99]. @ (YES) es lo mismo que [NSNumber numberWithBool: YES]. El signo @ es un atajo para crear objetos. – JoJo

+0

'NSLog (@"% @,% @ ", [@ (9) clase], [@ [@ (1), @ (2)] clase]);' obtuvo salida '__NSCFNumber, __NSArrayI' – Nianliang

58

De Objective-C Tutorial: The @ Symbol, la razón por la que está en el frente de varias palabras clave:

Usando @ debería hacer más fácil para atornillar 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 tokenizer (un paso simple y temprano en el compilador) 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 resto del compilador en el "modo Objective-C". (El analizador Objective-C sería responsable de devolver el compilador al modo C normal cuando detecta el final del código Objective-C).

También cuando se ve en frente de una cadena literal, hace una NSString en lugar de un 'char *' en C.

24

De Macrumors: Objective-C Tutorial, cuando delante de 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.

+11

*" It es esencialmente una abreviatura del método de NSString + stringWithUTF8String. "* Bueno, no exactamente. Las cadenas están asignadas estáticamente, lo que las hace diferentes de '+ [NSString stringWithUTF8String:]' (las cuales están dinámicamente asignadas), y su liberación y retención no tienen efecto sobre ellas. –

12

Desde el manual:

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

La clase NSString proporciona una envoltura objeto de cadenas que tiene toda de las ventajas que se esperan, que incorpora la memoria gestión para almacenar cadenas de longitud arbitraria, soporte para Unicode, utilidades de formato de estilo printf, y Más. Debido a que tales cadenas son utilizadas comúnmente, Objective-C proporciona una notación abreviada para creando objetos NSString a partir de valores constantes. Para utilizar esta forma abreviada, todo lo que tiene que hacer es preceder a una cadena normal, entre comillas dobles con el símbolo @ , como se muestra en los siguientes ejemplos:

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

Pero este es solo un ejemplo de dónde se usa '@'. Estoy viendo un código como este: 'mapperOptions = @ {kSTMapperVolumeResolutionKey: @ (volumeResolution),' ... nada que ver con NSString – GreenAsJade

Cuestiones relacionadas