如何将NSString初始化为NSMutableString?

时间:2009-11-30 03:25:10

标签: objective-c iphone casting nsmutablestring

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

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

4 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:4)

您可以将NSMutableString设置为NSString,但不能将其设置为

NSString *str =  [NSMutableString alloc]init];

没关系,但是

NSMutableString *str = [[NSString alloc]init];

不是。这是因为NSMutableString是NSString的子类,因此它是'NSString。 但是,您可以使用

从NSString创建可变字符串
NSMutableString *mStr = [str mutableCopy];

答案 2 :(得分:4)

NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];

重要! mutableCopy会返回您拥有的对象,因此您必须释放或自动发布它。

答案 3 :(得分:1)

Swift 2.0

对于Swift用户,以下内容适用于Xcode 7。

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)