Co oznacza symbol @ w objective-c?

Uczę się objective-c i ciągle wpadam na symbol@. Jest on używany w różnych scenariuszach, na przykład na początku łańcucha lub do syntezy metod accessora.

Co oznacza symbol @ w objective-c?

 134
Author: The Archetypal Paul, 2008-08-25

4 answers

Znak @ nie jest używany w identyfikatorach C lub C++, więc jest używany do wprowadzania słów kluczowych języka Objective - C w sposób, który nie będzie sprzeczny ze słowami kluczowymi innych języków. Umożliwia to swobodne mieszanie się "obiektywnej" części języka z częścią C lub c++.

Tak więc, z nielicznymi wyjątkami, za każdym razem, gdy widzisz @ w jakimś kodzie Objective-C, patrzysz na Objective-C zamiast na C lub C++.

Główne wyjątki to id, Class, nil i Nil, które są ogólnie traktowane jako słowa kluczowe językowe, mimo że mogą również mieć za sobą typedef lub #define. Na przykład kompilator traktuje id szczególnie pod względem reguł konwersji typu wskaźnika, które stosuje do deklaracji, a także do decyzji, czy generować bariery zapisu GC.

Inne wyjątki to in, out, inout, oneway, byref, i bycopy; są one używane jako adnotacje klasy storage na parametrze metody i zwracane typy, aby rozproszone obiekty były bardziej wydajne. (Stają się one częścią podpisu metody dostępnego w środowisku uruchomieniowym, na którym DO może patrzeć, aby określić, jak najlepiej serializować transakcję.) Istnieją również atrybuty w deklaracjach @property , copy, retain, assign, readonly, readwrite, nonatomic, getter, i setter; są one ważne tylko w sekcji atrybutów deklaracji @property.
 153
Author: Chris Hanson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-25 08:36:29

Z Objective-C Tutorial: symbol @ , powód, dla którego znajduje się na przodzie różnych słów kluczowych:

Użycie @ powinno ułatwić podłączenie kompilatora Objective - C do istniejącego kompilatora C. Ponieważ @ nie jest poprawny w żadnym kontekście w C z wyjątkiem literałów łańcuchowych, tokenizer (wczesny i prosty krok w kompilatorze) może być zmodyfikowany tak, aby po prostu szukał znaku @ poza stałą łańcuchową (tokenizer rozumie literały łańcuchowe, więc znajduje się w pozycji aby to rozróżnić). Po napotkaniu @ tokenizer ustawia resztę kompilatora w trybie " Objective-C mode."(Parser Objective-C byłby odpowiedzialny za przywrócenie kompilatora do zwykłego trybu C, gdy wykryje koniec kodu Objective-C).

Również, gdy widzi się go przed literalnym łańcuchem znaków, tworzy NSString zamiast 'char *' w C.

 59
Author: thelsdj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-25 08:10:15

From Macrumors: Objective-C Tutorial , when in front of string literal:

Istnieją również literały @ "" NSString. Jest to zasadniczo skrót dla metody NSString +stringWithUTF8String.

@ dodaje również obsługę unicode do ciągów C.

 24
Author: Van Nguyen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-11 15:27:28

Z Instrukcji :

Struktury Objective-C zazwyczaj nie używają łańcuchów w stylu C. Zamiast, przekazują one ciągi znaków jako obiekty NSString.

Klasa NSString zapewnia object wrapper dla łańcuchów, które mają wszystkie z zalet, których można się spodziewać, w tym wbudowanej pamięci Zarządzanie przechowywaniem łańcuchów dowolnej długości, obsługa Unicode, narzędzia do formatowania w stylu printf i nie tylko. Ponieważ takie struny są używane powszechnie choć, Objective-C zapewnia zapis skrócony dla tworzenie obiektów NSString z wartości stałych. Aby użyć tego skrótu, wszystko, co musisz zrobić, to poprzedzić normalny, podwójnie cytowany ciąg z @ symbol, jak pokazano na poniższych przykładach:

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
 12
Author: pabloelustondo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-10 05:38:42