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 unatypedefo#definedetrás de ellos. Por ejemplo, el compilador realmente trataidespecialmente 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@propertylas declaraciones,copy,retain,assign,readonly,readwrite,nonatomic,getter, ysetter; esos solo son válidos dentro de la sección de atributos de una@propertydeclaració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