7

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

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

4 回答 4

11

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

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

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

于 2009-11-30T03:29:36.930 回答
4

您可以将 NSMutableString 设置为 NSString,但不能反过来

NSString *str =  [NSMutableString alloc]init];

没关系,但是

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

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

NSMutableString *mStr = [str mutableCopy];
于 2009-11-30T03:27:20.537 回答
4
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];

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

于 2009-11-30T03:28:25.093 回答
1

斯威夫特 2.0

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

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
于 2015-09-08T19:23:32.790 回答