Objective-c: Was bedeutet der Rückgabetyp __strong const char *?

9

Beim Lesen der Header der Foundation habe ich folgendes gefunden:

%Vor%

Dies ist von NSString.h im iOS 7.1 SDK, was bedeutet __strong const char * hier?

Ich bin sehr verwirrt über die "__strong" hier.

    
CarmeloS 19.05.2014, 07:33
quelle

3 Antworten

5

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.

    
Nikolai Ruhe 19.05.2014, 09:03
quelle
0

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.

    
mipadi 19.05.2014 09:10
quelle
-1

__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.

    
Misha Tavkhelidze 19.05.2014 07:52
quelle

Tags und Links