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?
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?
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
, und Nil
, die in der Regel als Sprache Keywords selbst behandelt werden , obwohl sie können auch eine haben typedef
oder #define
hinter ihnen. Beispielsweise behandelt der Compiler id
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
, und bycopy
; 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ärungen copy
, retain
, assign
, readonly
, readwrite
, nonatomic
, getter
, und setter
; Diese sind nur innerhalb des Attributabschnitts einer @property
Deklaration gültig .
@
.
@
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:
Die Verwendung von @ sollte es einfacher machen, einen Objective-C-Compiler an einen vorhandenen C-Compiler anzuschließen. Da das @ in keinem Kontext in C außer einem Zeichenfolgenliteral gültig ist, kann der Tokenizer (ein früher und einfacher Schritt im Compiler) so geändert werden, dass einfach nach dem @ -Zeichen außerhalb einer Zeichenfolgenkonstante gesucht wird (der Tokenizer versteht Zeichenfolgenliterale , so ist es in der Lage, dies zu unterscheiden). Wenn @ angetroffen wird, versetzt der Tokenizer den Rest des Compilers in den "Objective-C-Modus". (Der Objective-C-Parser ist dafür verantwortlich, den Compiler wieder in den regulären C-Modus zu versetzen, wenn er das Ende des Objective-C-Codes erkennt.)
Auch wenn es vor einem String-Literal angezeigt wird, wird in C eher ein NSString als ein 'char *' erstellt.
Von Macrumors: Objective-C Tutorial , wenn vor dem String-Literal:
Es gibt auch @ "" NSString-Literale. Es ist im Wesentlichen eine Abkürzung für die + stringWithUTF8String-Methode von NSString.
Das @ fügt C-Strings auch Unicode-Unterstützung hinzu.
+[NSString stringWithUTF8String:]
denen unterscheiden (diese werden dynamisch zugewiesen), und das Freigeben und Beibehalten hat keine Auswirkungen auf sie.
Aus dem Handbuch :
Objective-C-Frameworks verwenden normalerweise keine Zeichenfolgen im C-Stil. Stattdessen übergeben sie Zeichenfolgen als NSString-Objekte.
Die NSString-Klasse bietet einen Objekt-Wrapper für Zeichenfolgen, der alle erwarteten Vorteile bietet, einschließlich integrierter Speicherverwaltung zum Speichern von Zeichenfolgen beliebiger Länge, Unterstützung für Unicode, Formatierungsdienstprogramme im Printf-Stil und mehr. Da solche Zeichenfolgen jedoch häufig verwendet werden, bietet Objective-C eine Kurzschreibweise zum Erstellen von NSString-Objekten aus konstanten Werten. Um diese Kurzform zu verwenden, müssen Sie lediglich einer normalen Zeichenfolge in doppelten Anführungszeichen das @ -Symbol voranstellen, wie in den folgenden Beispielen gezeigt:
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@
verwendet wird. Ich sehe Code wie mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
folgt : ... nichts mit NSString zu tun