如何将NSString初始化为NSMutableString?

sen*_*thu 6 iphone casting objective-c nsmutablestring

有没有办法将NSString初始化为NSMutableString?还是逆序?

-(void)st:(NSString *)st
{
  NSMutableString str = st; // gives warning..
  NSLog(@"string: %@", str);
}
Run Code Online (Sandbox Code Playgroud)

not*_*oop 10

NSString是一个不可变的表示(或最糟糕的只读视图).因此,NSMutableString如果您知道它是可变的或者制作可变副本,则需要转换为a :

-(void)st:(NSString *)st
{
  NSMutableString *str =  [[st mutableCopy] autorelease];
  NSLog(@"string: %@", str);
}
Run Code Online (Sandbox Code Playgroud)

我自动释放它因为mutableCopy返回一个保留计数为1的新初始化副本.


Joe*_*tti 4

您可以将 NSMutableString 设置为 NSString,但反之则不行

NSString *str =  [NSMutableString alloc]init];
Run Code Online (Sandbox Code Playgroud)

没关系,但是

NSMutableString *str = [[NSString alloc]init];
Run Code Online (Sandbox Code Playgroud)

不是。这是因为 NSMutableString 是 NSString 的子类,因此它“是”NSString。但是,您可以使用 NSString 创建可变字符串

NSMutableString *mStr = [str mutableCopy];
Run Code Online (Sandbox Code Playgroud)