Estoy aprendiendo el objetivo-c y sigo tropezando 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 el objetivo-c?
Estoy aprendiendo el objetivo-c y sigo tropezando 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 el objetivo-c?
Respuestas:
El @
carácter no se usa en identificadores 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 los 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 Objective-C, está viendo construcciones Objective-C en lugar de construcciones 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 puede disponer de 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 tipo de puntero que aplica a las declaraciones, así como 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 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 desde el tiempo de ejecución, que puede mirar a la DO para determinar la mejor manera de serializar una transacción.) También están los atributos dentro de @property
las declaraciones, copy
, retain
, assign
, readonly
, readwrite
, nonatomic
, getter
, y setter
; esos solo son válidos dentro de la sección de atributos de una @property
declaración.
@
.
@
personaje no fue utilizado por C, por lo que fue una conveniente "escotilla de escape" para el análisis alternativo que también conserva el 100% de compatibilidad con el código C existente.
Del tutorial de Objective-C: El símbolo @ , la razón por la que está en el frente de varias palabras clave:
El uso de @ debería facilitar la conexión de un compilador de Objective-C a un compilador de C existente. Debido a que el @ no es válido en ningún contexto en C excepto un literal de cadena, el tokenizer (un paso temprano y simple 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 pondría al resto del compilador en "modo Objective-C". (El analizador Objective-C sería responsable de devolver el compilador al modo C normal cuando detecte el final del código Objective-C).
Además, 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 , frente al literal de cadena:
También hay literales @ "" NSString. Es esencialmente una forma abreviada del método NSString + stringWithUTF8String.
El @ también agrega soporte unicode a las cadenas C.
+[NSString stringWithUTF8String:]
(las que se asignan dinámicamente), y liberar y retener no tienen ningún efecto sobre ellas.
Desde el manual :
Los marcos de Objective-C generalmente no usan cadenas de 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 esperaría, incluida la administració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 abreviatura, todo lo que tiene que hacer es preceder 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"];
@
se usa. Estoy mirando un código como este: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... nada que ver con NSString