Was macht die folgende Zeile eigentlich?
string = @"Some text";
Unter der Annahme, dass "string" thusly im Header deklariert wird:
NSString *string;
Was bedeutet das "=" hier eigentlich tun? Was macht es, um die Referenzzahl zu "string"?
string
ist keine Zeichenfolge.
string
ist in der Tat auch keine andere Art von Kakao-Objekt.
string
ist eine Variable, die Sie erstellt haben, um eine Instanz von NSString zu halten. 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 ist, kein Cocoa-Objekt, enthält sie keine Referenzzählung.
Zuweisen eines Objekts irgendwo kann die Lebensdauer des Objekts in Garbage-Collection-Code (nur auf dem Mac) verlängern. Weitere Informationen finden Sie unter the Memory Management Programming Guide for 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 stellen (jedenfalls nicht in Objective-C).
Danke! Das ist, was ich in Bezug auf die Zeigerzuweisung erwartete ... ... Aah, so die "-1" behalten Zählung nach der Zuweisung (dh [String RetainCount]) ist ein Flag, das angibt, dass "String" auf ein String-Literal zeigt muss also nicht verwaltet werden, kann aber sicher freigegeben werden? – notMyScreenName
Die "Retain-Anzahl" von -1 nach der Zuweisung zeigt an, dass Sie niemals die absolute Retain-Anzahl eines Objekts beachten sollten. Wenn Sie es behalten, sollten Sie es freigeben. Das ist alles. Dass "@" -Strings Retain/Release nicht benötigen, ist ein Implementierungsdetail, auf das man sich technisch nicht verlassen sollte. Aber jeder tut es und alles würde kaputt gehen, wenn sich die Implementierung ändern würde. – bbum