Uczę się celu-c i ciągle wpadam na symbol @. Jest używany w różnych scenariuszach, na przykład na początku łańcucha lub do syntezy metod akcesorów.
Co oznacza symbol @ w celu-c?
Uczę się celu-c i ciągle wpadam na symbol @. Jest używany w różnych scenariuszach, na przykład na początku łańcucha lub do syntezy metod akcesorów.
Co oznacza symbol @ w celu-c?
Odpowiedzi:
@
Znak nie jest używany w identyfikatorach C lub C ++, więc jest on wykorzystywany do wprowadzenia objective-c słowa kluczowe języka w sposób, który nie będzie w konflikcie z kluczowych innych językach. Umożliwia to swobodne mieszanie części języka „Objective” z częścią C lub C ++.
Tak więc, z nielicznymi wyjątkami, za każdym razem, gdy widzisz @
jakiś kod Objective-C, patrzysz na konstrukcje Objective-C, a nie konstrukcje C lub C ++.
Głównymi wyjątkami są id
, Class
, nil
, i Nil
, które są powszechnie traktowane jako słowa kluczowe językowych, chociaż mogą one również mieć typedef
lub #define
za nimi. Na przykład kompilator faktycznie traktuje id
specjalnie pod względem reguł konwersji typów wskaźników, które stosuje do deklaracji, a także decyzji, czy generować bariery zapisu GC.
Inne wyjątki są in
, out
, inout
, oneway
, byref
, i bycopy
; są one używane jako adnotacje do klas magazynu w parametrach metody i typach zwracanych, aby zwiększyć wydajność obiektów rozproszonych. (Stają się częścią podpisu metody dostępne w czasie pracy, który DO może patrzeć na celu ustalenia, w jaki sposób najlepiej serializować transakcję). Istnieje również atrybuty w @property
deklaracji, copy
, retain
, assign
, readonly
, readwrite
, nonatomic
, getter
, i setter
; są one ważne tylko w sekcji atrybutów w @property
deklaracji.
@
.
@
Charakter był nieużywany przez C, więc to było wygodne „luk ratunkowy” do alternatywnego parsowania że również zachowaną 100% kompatybilności z istniejącym kodem C.
Z samouczka Objective-C: Symbol @ , powód, dla którego znajduje się na początku różnych słów kluczowych:
Użycie @ powinno ułatwić połączenie kompilatora Objective-C z istniejącym kompilatorem C. Ponieważ znak @ nie jest prawidłowy w żadnym kontekście w języku C z wyjątkiem literału ciągu, tokenizer (wczesny i prosty krok w kompilatorze) można zmodyfikować, aby po prostu szukał znaku @ poza stałą ciągu (tokenizer rozumie literały ciągu , więc jest w stanie to rozróżnić). Gdy zostanie napotkany @, tokenizer przestawi resztę kompilatora w „tryb Objective-C”. (Parser celu-C byłby odpowiedzialny za przywrócenie kompilatora z powrotem do zwykłego trybu C, gdy wykryje koniec kodu celu-C).
Również, gdy jest widziany przed literałem ciągu, tworzy NSString zamiast 'char *' w C.
Z Macrumors: Objective-C Tutorial , przed literałem ciągu:
Istnieją również literały @ "" NSString. Jest to zasadniczo skrót od metody stringWithUTF8String NSString.
@ Dodaje również obsługę Unicode do ciągów C.
Z instrukcji :
Struktury Objective-C zazwyczaj nie używają ciągów w stylu C. Zamiast tego przekazują ciągi znaków jako obiekty NSString.
Klasa NSString zapewnia opakowanie obiektów dla ciągów, które ma wszystkie oczekiwane korzyści, w tym wbudowane zarządzanie pamięcią do przechowywania ciągów o dowolnej długości, obsługę Unicode, narzędzia do formatowania w stylu printf i inne. Ponieważ takie łańcuchy są jednak powszechnie używane, Objective-C zapewnia skróconą notację do tworzenia obiektów NSString ze stałych wartości. Aby użyć tego skrótu, wszystko, co musisz zrobić, to poprzedzić zwykły ciąg w podwójnym cudzysłowie symbolem @, jak pokazano w poniższych przykładach:
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@
zastosowania. Patrzę na taki kod: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... nie ma nic wspólnego z NSString