NSString Zuweisung und Initialisierung
Was ist der Unterschied zwischen:
NSString *string1 = @"This is string 1.";
und
NSString *string2 = [[NSString alloc]initWithString:@"This is string 2.];
Warum bin ich nicht reservieren und initialisieren Sie die erste Zeichenfolge, aber es funktioniert immer noch? Ich dachte, ich sollte reservieren, NSString, da es ein Objekt ist?
In Cocoa Touch,
-(IBAction) clicked: (id)sender{
NSString *titleOfButton = [sender titleForState:UIControlStateNormal];
NSString *newLabelText = [[NSString alloc]initWithFormat:@"%@", titleOfButton];
labelsText.text=newLabelText;
[newLabelText release];
}
Warum ich nicht reservieren und initialisieren Sie für den titleOfButton string? Nicht die Methode, ich nenne das für mich tun?
Auch, ich bin mit XCode 4, aber ich mag iOS 5, und solche, so dass ich nicht verwenden, ARC, falls jene Gegenstände. Bitte nicht sagen ich sollte, ich bin nur hier, um herauszufinden, warum dies so ist. Danke!
- mögliche Duplikate von Do NSString-Objekte werden müssen alloc und init?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die variable
string1
ist einNSString
string-literal. Der compiler reserviert Speicherplatz für die es in Ihre ausführbare Datei. Es wird in den Speicher geladen und initialisiert, wenn das Programm ausgeführt wird. Es lebt, solange die app läuft. Sie brauchen nicht zuretain
oderrelease
es.Die Lebensdauer der variable
string2
ist, so lange wie Sie diktieren, bis zu dem Punkt, wenn Sierelease
seine Letzte Referenz. Ordnen Sie Platz für ihn, also bist du verantwortlich für die Reinigung nach.Die Lebensdauer der variable
titleOfButton
ist das Leben die Methode-clicked:
. Das ist, weil die Methode-titleForState:
gibt einautorelease
-dNSString
. Dieser string wird automatisch freigegeben, sobald der Gültigkeitsbereich der Methode.Brauchen Sie nicht zu erstellen
newLabelText
. Dieser Schritt ist überflüssig und unübersichtlich. Legen Sie einfach dielabelsText.text
EigenschafttitleOfButton
:Warum Eigenschaften? Da das einrichten dieses
retain
Eigenschaft erhöht den VerweiszählertitleOfButton
durch eine (das ist, warum es heißt einretain
- Eigenschaft), und so wird der string mit Spitzen, vontitleOfButton
wird live über das Ende des-clicked:
.Andere Art und Weise zu denken über die Verwendung von
retain
in diesem Beispiel ist, dasslabelsText.text
ist "die Eigenverantwortung" der string verweisttitleOfButton
. Dieser string wird nun so lange dauern wielabelsText
Leben (es sei denn, einige andere Variablen, die auch die Besitzrechte an den string).retain
undrelease
auf@
-Stil string-Literale in Objective-C explizit ignoriert. Sie könnenrelease
es den ganzen Tag lang und es wird nicht freigegeben werden.labelsText.text
Eigenschaft behält die Zeichenfolge, die Sie legen Sie es auf. So brauchen Sie nicht zu verwendenretain
, weil Sie über Eigenschaft-Wert-Zuordnung, um für Sie tun. Siehe dieses tutorial für eine längere Erklärung von Objective-C Eigenschaften: raywenderlich.com/2712/using-properties-in-objective-c-tutorial