Pergunta

Estou aprendendo o objetivo-c e continuo encontrando o símbolo @.É usado em diferentes cenários, por exemplo, no início de uma string ou para sintetizar métodos acessadores.

O que o símbolo @ significa no objetivo-c?

Foi útil?

Solução

O @ O caractere não é usado em identificadores C ou C++, portanto, é usado para introduzir palavras-chave da linguagem Objective-C de uma forma que não entre em conflito com as palavras-chave de outras linguagens.Isso permite que a parte "Objetivo" da linguagem se misture livremente com a parte C ou C++.

Assim, com muito poucas exceções, sempre que você vir @ em alguns códigos Objective-C, você está olhando para construções Objective-C em vez de construções C ou C++.

As principais exceções são id, Class, nil, e Nil, que geralmente são tratadas como palavras-chave de idioma, embora também possam ter um typedef ou #define atrás deles.Por exemplo, o compilador realmente trata id especialmente em termos das regras de conversão do tipo de ponteiro que se aplica às declarações, bem como à decisão de gerar barreiras de gravação do GC.

Outras exceções são in, out, inout, oneway, byref, e bycopy;eles são usados ​​como anotações de classe de armazenamento em parâmetros de método e tipos de retorno para tornar os objetos distribuídos mais eficientes.(Eles se tornam parte da assinatura do método disponível no tempo de execução, que o DO pode analisar para determinar a melhor forma de serializar uma transação.) Existem também os atributos dentro @property declarações, copy, retain, assign, readonly, readwrite, nonatomic, getter, e setter;eles são válidos apenas na seção de atributos de um @property declaração.

Outras dicas

De Tutorial Objective-C:O símbolo, o motivo pelo qual está na frente de várias palavras-chave:

O uso de @ deve facilitar a integração de um compilador Objective-C em um compilador C existente.Como o @ não é válido em nenhum contexto em C, exceto em uma string literal, o tokenizer (uma etapa inicial e simples no compilador) pode ser modificado para simplesmente procurar o caractere @ fora de uma constante de string (o tokenizer entende literais de string , portanto, está em condições de distinguir isso).Quando @ é encontrado, o tokenizer colocou o restante do compilador no "Modo Objective-C". (O analisador Objective-C seria responsável por devolver o compilador de volta ao modo C regular quando detectar o final do código Objective-C).

Além disso, quando visto na frente de uma string literal, cria um NSString em vez de um 'char *' em C.

De Macrumores:Tutorial Objective-C, quando na frente da string literal:

Existem também literais @"" NSString.É essencialmente uma abreviação do método +stringWithUTF8String do NSString.

O @ também adiciona suporte unicode às strings C.

De manual:

As estruturas Objective-C normalmente não usam strings no estilo C.Em vez disso, eles passam as cordas como objetos NSString.

A classe NSString fornece um invólucro de objetos para strings que possuem todas as vantagens que você esperaria, incluindo gerenciamento de memória embutido para armazenar strings de comprimento arbitrário, suporte para utilitários de formatação de unicode, estilo printf e muito mais.Como essas seqüências são usadas comumente, 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 string normal e calçada com o símbolo @, como mostrado nos exemplos a seguir:

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top