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?
objective-c
Benedict Cohen
fuente
fuente
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
, yNil
, que generalmente son tratados como palabras clave del lenguaje a pesar de que puede disponer de unatypedef
o#define
detrás de ellos. Por ejemplo, el compilador realmente trataid
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
, ybycopy
; 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
, ysetter
; esos solo son válidos dentro de la sección de atributos de una@property
declaración.fuente
@
.@
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:
Además, cuando se ve delante de un literal de cadena, hace un NSString en lugar de un 'char *' en C.
fuente
De Macrumors: Tutorial de Objective-C , frente al literal de cadena:
El @ también agrega soporte unicode a las cadenas C.
fuente
+[NSString stringWithUTF8String:]
(las que se asignan dinámicamente), y liberar y retener no tienen ningún efecto sobre ellas.Desde el manual :
fuente
@
se usa. Estoy mirando un código como este:mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... nada que ver con NSString