Wie NSString zu NSMutableString initialisieren?
-
08-07-2019 - |
Frage
Gibt es eine Möglichkeit NSString zu NSMutableString zu initialisieren? und auch umgekehrte Reihenfolge?
-(void)st:(NSString *)st
{
NSMutableString str = st; // gives warning..
NSLog(@"string: %@", str);
}
Lösung
NSString
ist eine unveränderliche Darstellung (oder eine Nur-Lese-Ansicht im schlimmsten Fall). So müssen Sie entweder gegossen zu einem NSMutableString
wenn Sie wissen, es ist wandelbar oder eine änderbare Kopie machen:
-(void)st:(NSString *)st
{
NSMutableString *str = [[st mutableCopy] autorelease];
NSLog(@"string: %@", str);
}
ich Autoreleased es, weil mutableCopy
eine neu initialisiert Kopie mit einer Zählung von 1 beibehalten zurück.
Andere Tipps
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];
Wichtig! mutableCopy
gibt ein Objekt, die Sie besitzen, so müssen Sie entweder freigeben oder Autorelease.
Sie können eine NSMutableString zu einem NSString gesetzt, aber nicht umgekehrt
NSString *str = [NSMutableString alloc]init];
ist in Ordnung, aber
NSMutableString *str = [[NSString alloc]init];
ist es nicht. Dies liegt daran, eine NSMutableString eine Unterklasse von NSString ist, so ist es ein "NSString. Sie können jedoch eine veränderbare Zeichenfolge aus einem NSString erstellen mit
NSMutableString *mStr = [str mutableCopy];
Swift 2.0
Für Swift Benutzer, die folgenden Werke in Xcode 7.
var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)