Ich lerne Ziel-c und stoße immer wieder auf das @ -Symbol. Es wird in verschiedenen Szenarien verwendet, beispielsweise am Anfang eines Strings oder zur Synthese von Zugriffsmethoden.
Was bedeutet das @ -Symbol in Ziel-c?
objective-c
Benedict Cohen
quelle
quelle
Antworten:
Das
@
Zeichen wird nicht in C- oder C ++ - Bezeichnern verwendet, daher wird es verwendet, um Objective-C-Sprachschlüsselwörter so einzuführen, dass sie nicht mit den Schlüsselwörtern der anderen Sprachen in Konflikt stehen. Dadurch kann sich der "Objective" -Teil der Sprache frei mit dem C- oder C ++ - Teil vermischen.Mit sehr wenigen Ausnahmen betrachten Sie jedes Mal, wenn Sie
@
in einem Objective-C-Code etwas sehen, eher Objective-C-Konstrukte als C- oder C ++ - Konstrukte.Die wichtigsten Ausnahmen sind
id
,Class
,nil
, undNil
, die in der Regel als Sprache Keywords selbst behandelt werden , obwohl sie können auch eine habentypedef
oder#define
hinter ihnen. Beispielsweise behandelt der Compilerid
die Konvertierungsregeln für Zeigertypen, die er für Deklarationen anwendet, sowie die Entscheidung, ob GC-Schreibbarrieren generiert werden sollen , speziell.Andere Ausnahmen sind
in
,out
,inout
,oneway
,byref
, undbycopy
; Diese werden als Anmerkungen zur Speicherklasse für Methodenparameter und Rückgabetypen verwendet, um verteilte Objekte effizienter zu gestalten. (Sie werden Teil der Methodensignatur zur Verfügung von der Laufzeit, die DO bei bestimmen , wie man am besten serialize eine Transaktion suchen.) Es gibt auch die Attribute innerhalb@property
Erklärungencopy
,retain
,assign
,readonly
,readwrite
,nonatomic
,getter
, undsetter
; Diese sind nur innerhalb des Attributabschnitts einer@property
Deklaration gültig .quelle
@
.@
Zeichen wurde von C nicht verwendet, daher war es eine praktische „Notluke“ zum alternativen Parsen, die auch die 100% ige Kompatibilität mit vorhandenem C-Code bewahrte.Aus dem Objective-C-Tutorial: Das @ -Symbol , der Grund, warum es auf der Vorderseite verschiedener Schlüsselwörter steht:
Auch wenn es vor einem String-Literal angezeigt wird, wird in C eher ein NSString als ein 'char *' erstellt.
quelle
Von Macrumors: Objective-C Tutorial , wenn vor dem String-Literal:
Das @ fügt C-Strings auch Unicode-Unterstützung hinzu.
quelle
+[NSString stringWithUTF8String:]
denen unterscheiden (diese werden dynamisch zugewiesen), und das Freigeben und Beibehalten hat keine Auswirkungen auf sie.Aus dem Handbuch :
quelle
@
verwendet wird. Ich sehe Code wiemapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
folgt : ... nichts mit NSString zu tun