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?
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?
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, e Nil, que geralmente são tratadas como palavras-chave de linguagem, embora eles também podem ter um typedefou #defineatrás deles. Por exemplo, o compilador realmente trata idespecialmente 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, e bycopy; 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 @propertydeclarações, copy, retain, assign, readonly, readwrite, nonatomic, getter, e setter; esses são válidos somente na seção de atributos de uma @propertydeclaração.
@.
@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:
O uso de @ deve facilitar a instalação de um compilador Objective-C em um compilador C existente. Como @ não é válido em nenhum contexto em C, exceto em uma literal de cadeia, o tokenizer (uma etapa inicial e simples do compilador) pode ser modificado para procurar simplesmente o caractere @ fora de uma constante de cadeia (o tokenizador entende os literais de cadeia , portanto, é possível distinguir isso). Quando @ é encontrado, o tokenizer coloca o restante do compilador no "modo Objective-C". (O analisador Objective-C seria responsável por retornar o compilador de volta ao modo C normal quando detectar o final do código Objective-C).
Além disso, quando visto na frente de uma string literal, ele cria um NSString em vez de um 'char *' em C.
No Macrumors: Tutorial do Objective-C , quando na frente da string literal:
Também existem @ "" literais NSString. É essencialmente uma abreviação para o método + stringWithUTF8String do NSString.
O @ também adiciona suporte unicode às seqüências C.
Do manual :
As estruturas de Objective-C normalmente não usam seqüências de caracteres de estilo C. Em vez disso, eles passam seqüências de caracteres como objetos NSString.
A classe NSString fornece um invólucro de objeto para seqüências de caracteres com todas as vantagens que você esperaria, incluindo gerenciamento de memória interno para armazenar seqüências de comprimento arbitrário, suporte para Unicode, utilitários de formatação no estilo printf e muito mais. Como essas cadeias de caracteres são usadas normalmente, o Objective-C fornece uma notação abreviada para criar objetos NSString a partir de valores constantes. Para usar essa abreviação, tudo o que você precisa fazer é preceder uma seqüência normal de aspas duplas com o símbolo @, conforme mostrado nos exemplos a seguir:
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@é usado. Eu estou olhando para um código como este: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),... nada a ver com NSString