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?
objective-c
Benedict Cohen
źródło
źródło
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
, iNil
, 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 traktujeid
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
, ibycopy
; 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
, isetter
; są one ważne tylko w sekcji atrybutów w@property
deklaracji.źródło
@
.@
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:
Również, gdy jest widziany przed literałem ciągu, tworzy NSString zamiast 'char *' w C.
źródło
Z Macrumors: Objective-C Tutorial , przed literałem ciągu:
@ Dodaje również obsługę Unicode do ciągów C.
źródło
+[NSString stringWithUTF8String:]
(są przydzielane dynamicznie), a zwolnienie i zachowanie nie mają na nie żadnego wpływu.Z instrukcji :
źródło
@
zastosowania. Patrzę na taki kod:mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... nie ma nic wspólnego z NSString