Mit substringFromIndex auf NSMutableString
Warum ist substringFromIndex
funktioniert nicht für meine NSMutableString
?
Hier code ähnlich zu dem, was ich habe :
NSMutableString *myString = [[NSMutableString alloc] initWithString:@"This is my String"];
[myString substringFromIndex:5];
NSLog(@"myString = %@", myString); //will output This is my String
Wenn ich substringFromIndex
auf NSString
es wird funktionieren, zum Beispiel so :
NSString *tempStr = [[NSString alloc] init];
tempStr = [myString substringFromIndex:5];
NSLog(@"tempStr = %@", tempStr); //will output is my String
Warum es nicht funktioniert in dem ersten Beispiel, und ich habe noch eine Frage, wenn ich es mit der zweiten Methode, und dann setze ich:
[myString setString:tempStr];
[tempStr release];
Dadurch kommt es zu einem crash, ich dachte, da ich früher setString auf NSMutableString
, dass ich nicht brauchen, die NSString
und ich lasse es, aber das ist scheinbar nicht der Fall, aber wenn ich autorelease es wird in Ordnung sein
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass die Methode nie verändert die Zeichenfolge, die Sie rufen es auf. Es gibt einen neuen string, in beiden Fällen. So ordnen Sie eine neue string-variable und Ihre gute.
Es zu Abstürzen, weil Sie über die Freigabe eines Objekts und und lecken ein anderer. Sie
alloc
die erste saite, dann eine neue autoreleased-string aussubstringFromIndex:
dann Los. Sie brauchen nicht zu versuchen, diese schwer.Weisen Sie einfach die Ausgabe der substring-Methode auf eine variable, und lassen Sie es autoreleased für Sie. Keine alloc, keine Freigabe.
Einen vollen richtigen Beispiel könnte so Aussehen:
oder noch einfacher:
[[NSString alloc] init]
initialisieren wird ein neues string-Objekt. AbersubstringFromIndex:
gibt ein völlig anderes string-Objekt. Also die, die Sie soeben erstellt haben, ist nie benutzt. Und schlimmer noch, es ist undicht, da Sie nie loslassen, das Objekt. Objekte zurückgegeben, die von Methoden autoreleased. Das heißt, Sie lösen sich, wenn sein safe. So sind Sie die Freigabe dieser autoreleased string-Objekt und, wenn der autorelease später löst seine bereits freigegeben, und Sie bekommen einen crash.NSString
ist unveränderlich, aber das bedeutet nicht, Sie könnenNSString *myString
an eine andere Zeichenfolge. Es bedeutet nur, dass das string-Objekt, das es derzeit Punkte können es nicht ändern internen Zustand. Aber Sie sind frei, zeigen Sie es auf eine andere Zeichenfolge, die Sie wollen. Und die meisten derNSString
Manipulationsmethoden der gerade wieder eine neue Zeichenfolge, die eine transformation des Empfängers, aber nicht verändern.alloc
ein Objekt, das bekommen Sie woanders. Und nierelease
Objekt, das Sie nichtalloc
oderretain
. Also in diesem Fall, Sie brauchen, umalloc
oderretain
, und Sie müssen daher nichtrelease
.Erstellen Sie einen NSMutableString speziell, so dass Sie KANN ändern.
Aber niemand weiß, jeder Weg, dies zu tun:
Und wenn Sie dieses tun, statt:
warum sogar mit einem veränderlichen in den ersten Platz.
MutableStrings sind ideal für HINZUFÜGEN (Anhängen) zu Ihnen.
Nicht sicher, warum können wir Sie nicht auch verkürzen (substring) Sie. (Ohne die Herstellung einer neuen Kopie.)
[myString substringFromIndex:5]
gibt ein neuesNSString
, beginnend mit dem angegebenen index. Es nicht ändernmyString
.versuchen, diesen code statt: