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ć typedeflub #defineza nimi. Na przykład kompilator faktycznie traktuje idspecjalnie 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 @propertydeklaracji, copy, retain, assign, readonly, readwrite, nonatomic, getter, i setter; są one ważne tylko w sekcji atrybutów w @propertydeklaracji.
@.
@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