Foundation wird zwischen iOS und Mac OS geteilt. Unter Mac OS gab es eine Zeitlang ein Speichersystem für Speicherbereinigung. Es ist jetzt veraltet und wird unter Mac OS nicht mehr unterstützt. Es wurde nie auf iOS verwendet.
GC hat __strong
als Modifizierer für einfache Zeiger-Typ-Deklarationen verwendet, um das auf Speicher bezogene Objekt sammelbar zu machen. Diese Verwendung von __strong
hat keine Bedeutung in ARC oder manuell gespeichertem / freigegebenem Code. Die Tatsache, dass es keine Warnung für die Deklaration gibt, liegt wahrscheinlich nur daran, dass clam keine Warnungen in Systemheadern ausgibt.
NS_RETURNS_INNER_POINTER
ist eine Clang-Annotation, die angibt, dass die Methode einen Zeiger auf eine ihrer inneren Datenstrukturen (dh eine Instanzvariable), und zurückgibt, so dass die innere Variable nicht gezählt wird Immer wenn diese Methode aufgerufen wird, sollte ARC die Retain-Anzahl für den Empfänger erhöhen (weil dieses Objekt nicht freigegeben werden soll, solange der Zeiger auf seine inneren Datenstrukturen verwendet wird).
In diesem Fall fungiert __strong
im Wesentlichen in Verbindung mit NS_RETURNS_INNER_POINTER
, um die Lebensdauer eines Objekts anzugeben, das einen Zeiger auf seine inneren Datenstrukturen zurückgegeben hat.
__strong
bedeutet, dass das Objekt (in diesem Fall der Klasse NSString), das den Zeiger enthält, seinen Besitz bis zum Ende der Lebensdauer des Objekts beibehält und der aufgespeicherte Speicher als Garbage-Collected erfasst wird. Daher INNER
.
const char *
bedeutet, dass das char
-Array, auf das der Zeiger zeigt, konstant ist, d. h. nicht geändert werden kann, indem zum Beispiel einige Zeichen geändert werden (Sie erhalten einen Compilerfehler).
Wenn Sie versuchen, dies zu kompilieren:
%Vor% Sie erhalten read-only variable is not assignable
Fehler.
Tags und Links objective-c