Was bewirkt die Zuweisung einer literalen Zeichenfolge an einen NSString mit "="?

8

Was macht die folgende Zeile eigentlich?

%Vor%

Angenommen, dass "string" im Header deklariert ist:

%Vor%

Was macht das "=" hier eigentlich? Was macht es, um die Referenzzahl zu "string"? Insbesondere unter der Annahme, dass "string" aus irgendeinem Grund nicht anderweitig zugewiesen ist, muss es freigegeben werden?

Danke!

    
notMyScreenName 13.01.2010, 04:09
quelle

3 Antworten

20

Die Aufgabe ist genau das. Der string -Zeiger ist im Grunde eine Bezeichnung, die auf eine bestimmte Adresse im Speicher zeigt. Reassignment-Anweisung würde dieses Label auf eine andere Adresse im Speicher verweisen!

Es ändert nicht die Referenzzählung oder macht darüber hinaus etwas in Objective-C. Sie müssen die Referenzzählung selbst pflegen, wenn Sie in einer Nicht-Speicherbereinigungsumgebung ausgeführt werden:

%Vor%

Zeichenfolgenliterale müssen jedoch nicht verwaltet werden, da sie statisch zugewiesen werden und nie freigegeben werden! Die Methoden release und retain sind also nur NOOPs (d. H. Keine Operationen). Sie können sie sicher weglassen.

    
notnoop 13.01.2010, 04:12
quelle
2
  

Was macht die folgende Zeile eigentlich?

%Vor%      

Angenommen, dass "string" im Header deklariert ist:

%Vor%      

Was macht das "=" hier eigentlich? Was macht es, die Referenzzahl zu "string"?

string ist keine Zeichenkette.

string ist tatsächlich auch keine andere Art von Cocoa-Objekten.

string ist eine Variable, die Sie für eine Instanz von NSString erstellt haben. Der Zuweisungsoperator legt etwas in eine Variable *. In Ihrem obigen Beispiel erstellen Sie eine literale Zeichenfolge und fügen diese in die Variable ein.

Da string eine Variable und kein Cocoa-Objekt ist, enthält sie keine Referenzzahl.

Ein Objekt irgendwo zuweisen kann die Lebenszeit des Objekts in Garbage-Collection-Code verlängern (nur auf dem Mac). Weitere Informationen finden Sie in der Memory Management-Programmieranleitung für Cocoa .

* Oder ein C-Array. Verwechseln Sie diese nicht mit Cocoa-Arrays. Sie sind nicht austauschbar, und Sie können den Zuweisungsoperator nicht verwenden, um Dinge in eine Cocoa-Sammlung zu übernehmen (jedenfalls nicht in Objective-C).

    
Peter Hosey 14.01.2010 17:24
quelle
0

Wenn Sie in diesem Fall ein Literal verwenden, ist es nur syntaktischer Zucker, um schnell ein NSString-Objekt zu erstellen. Einmal erstellt, verhält sich das Objekt genau wie ein anderes. Der Unterschied hier ist, dass Ihre Zeichenfolge in das Programm kompiliert wird, anstatt dynamisch erstellt zu werden.

    
D.C. 13.01.2010 04:13
quelle