【问题标题】:How to initialize NSString to NSMutableString?如何将 NSString 初始化为 NSMutableString?
【发布时间】:2025-12-27 20:50:10
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c iphone casting nsmutablestring


    【解决方案1】:

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

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

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

    【讨论】:

    • 我不知道这是否会起作用,但是 NSMutableString 应该是一个指针 NSMutableString *str = [[st mutableCopy] autorelease];
    【解决方案2】:
    NSString *someImmutableString = @"something";
    NSMutableString *mutableString = [someImmutableString mutableCopy];
    

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

    【讨论】:

      【解决方案3】:

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

      NSString *str =  [NSMutableString alloc]init];
      

      没关系,但是

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

      不是。这是因为 NSMutableString 是 NSString 的子类,所以它是一个 NSString。 但是,您可以使用

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

      【讨论】:

        【解决方案4】:

        斯威夫特 2.0

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

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

        【讨论】: