创建NSString的理想方式

时间:2014-03-04 19:23:53

标签: ios objective-c

启用ARC时,是否真的需要使用下面提到的格式创建字符串

NSString *string =[[NSString alloc]init];
          string =@"Hello";

或使用下面提到的格式是否理想

  1. NSString *theString = @"hello";

  2. NSString *string1 = [NSString stringWithString:@"hello"];

3 个答案:

答案 0 :(得分:3)

 NSString *string =[[NSString alloc]init]; 
 string =@"Hello";

对于字符串或其他任何内容来说,这完全是愚蠢的。您正在第一行中创建一个字符串并将其丢弃在第二行中。如果你没有使用ARC,这将是一个泄漏。

答案 1 :(得分:2)

永远不需要为init分配NSString(或者至少它基本没用),特别是如果你要立即将变量分配给另一个字符串。这只会导致第一个字符串被破坏。

选项1)很好。

选项2)很糟糕,你已经有了一个字符串文字,所以你不需要为另一个字符串实例分配单位。

答案 2 :(得分:1)

NSString *string =[[NSString alloc]init];
string =@"Hello";

上述代码存在两个问题:

  1. 您正在创建一个新的空字符串并将其分配给string,然后将不同的字符串对象分配给string。第二行不会更改您在第一行创建的字符串的内容;它会改变string指向的内容。因此,第一行唯一有用的效果是声明string变量。

  2. NSString是一个表示不可变字符串的类。也就是说,一旦创建了NSString的实例,就无法更改它。您必须在创建它时提供不可变对象的内容。因此,当你说[[NSString alloc] init]时,你会得到一个永远不会变为非空的空字符串,并根据你想要做的事情来判断这不是你想要的。

  3. 因此,您需要决定是否需要包含“Hello”的不可变字符串或稍后可以更改的可变字符串。在前一种情况下,你可以这样做:

    NSString *string = @"Hello";
    

    或者喜欢:

    NSString *string = [NSString stringWithString:@"Hello"];
    

    或者喜欢:

    NSString *string = [[NSString alloc] initWithString:@"Hello"];
    

    其中任何一个都是有效的,但第一个是最短且最清晰的。如果你想要一个可变的字符串,你可以说:

    NSMutableString *string = [NSMutableString string];
    [string setString:@"Hello"];
    

    做同样事情的更简单方法是:

    NSMutableString *string = [@"Hello" mutableCopy];