Estou aprendendo o objetivo-c e continuo esbarrando no símbolo @. É usado em diferentes cenários, por exemplo, no início de uma sequência ou para sintetizar métodos de acessador.
O que o símbolo @ significa no objetivo-c?
objective-c
Benedict Cohen
fonte
fonte
Respostas:
O
@
caractere não é usado nos identificadores C ou C ++, por isso é usado para introduzir palavras-chave da linguagem Objective-C de uma maneira que não entre em conflito com as palavras-chave das outras línguas. Isso permite que a parte "Objetiva" da linguagem se misture livremente com a parte C ou C ++.Portanto, com muito poucas exceções, sempre que você vê
@
em algum código Objective-C, você está olhando para construções de Objective-C em vez de construções de C ou C ++.As principais exceções são
id
,Class
,nil
, eNil
, que geralmente são tratadas como palavras-chave de linguagem, embora eles também podem ter umtypedef
ou#define
atrás deles. Por exemplo, o compilador realmente trataid
especialmente em termos das regras de conversão de tipo de ponteiro que se aplica às declarações, bem como à decisão de gerar ou não barreiras de gravação no GC.Outras exceções são
in
,out
,inout
,oneway
,byref
, ebycopy
; elas são usadas como anotações de classe de armazenamento no parâmetro do método e nos tipos de retorno para tornar os Objetos Distribuídos mais eficientes. (Eles se tornam parte da assinatura do método disponível a partir do tempo de execução, que não pode olhar para determinar a melhor forma de serialize uma transação.) Há também os atributos dentro@property
declarações,copy
,retain
,assign
,readonly
,readwrite
,nonatomic
,getter
, esetter
; esses são válidos somente na seção de atributos de uma@property
declaração.fonte
@
.@
caractere não foi utilizado por C, portanto, era uma "escotilha de escape" conveniente para a análise alternativa que também preservava 100% de compatibilidade com o código C existente.No Tutorial do Objective-C: o símbolo @ , a razão pela qual está na frente de várias palavras-chave:
Além disso, quando visto na frente de uma string literal, ele cria um NSString em vez de um 'char *' em C.
fonte
No Macrumors: Tutorial do Objective-C , quando na frente da string literal:
O @ também adiciona suporte unicode às seqüências C.
fonte
+[NSString stringWithUTF8String:]
(aquelas são alocadas dinamicamente), e liberar e reter não têm efeito sobre elas.Do manual :
fonte
@
é usado. Eu estou olhando para um código como este:mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... nada a ver com NSString