Warnung wegen nicht verwendeter Variablen mit statischem NSInteger, aber nicht mit NSString

9

Nachdem ich Xcode auf Version 5.1 aktualisiert hatte, gab es eine Warnung, die mir sagte, dass ich eine Konstante definiert hatte, die ich nicht verwendete. Seine Definition sah so aus:

%Vor%

Ich war froh zu sehen, dass es markiert wurde, weil ich dachte, dass dies bedeutete, dass der Compiler nun in der Lage war, zusätzlich zu den Variablen nach unbenutzten Konstanten zu suchen.

Ich habe etwas mehr umstrukturiert, wodurch drei NSString -Konstanten obsolet geworden sind. Alle drei wurden sehr ähnlich wie die NSInteger von oben definiert:

%Vor%

Zu meiner Überraschung werden diese jedoch nicht als "unbenutzt" markiert, obwohl ich sicher bin, dass sie nicht mehr benutzt werden.

Kann jemand erklären, warum ein NSInteger vom Compiler als unbenutzt wahrgenommen wird, aber ein NSString nicht?

    
Scott Berrevoets 18.03.2014, 20:08
quelle

2 Antworten

2

Eine primitive Variable ist nur ein Speicherblock, der in einem statischen Speicherbereich zugewiesen und vom Compiler initialisiert wird. Das String-Objekt ist jedoch eine Variable, die zur Laufzeit (wahrscheinlich beim Start) initialisiert wird. Der Compiler fügt also dem Konstruktor einen impliziten Aufruf hinzu, und verwendet die Variable als Parameter für diesen Aufruf. Also wird die Variable verwendet.

Das _unused -Element der Struktur ist IMHO keine Direktive, sondern nur eine Membervariable, wahrscheinlich wird es zur besseren Ausrichtung hinzugefügt (füllt die Objektgröße auf eine runde Größe).

    
CiaPan 26.03.2014, 06:42
quelle
1

Die Definition eines NSString Literals zum Zeitpunkt der Kompilierung basiert auf der Verwendung der Meta-Klasse NSSimpleCString . Diese Klasse sieht ungefähr so ​​aus:

%Vor%

Das Hinzufügen des _unused -Flags lässt mich glauben, dass der Code den Compiler dazu anweist, diese Warnungen mit NSSimpleCString zum Schweigen zu bringen Sie können es versuchen, indem Sie Ihre Ganzzahl oder Gleitkommazahl mit __unused like:

voranstellen %Vor%

Für eine ausführlichere Erklärung lesen Sie den Artikel über Literale von Mike Ash

    
cescofry 24.03.2014 14:24
quelle