启用ARC时,是否真的需要使用下面提到的格式创建字符串
NSString *string =[[NSString alloc]init];
string =@"Hello";
或使用下面提到的格式是否理想
NSString *theString = @"hello";
NSString *string1 = [NSString stringWithString:@"hello"];
答案 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";
上述代码存在两个问题:
您正在创建一个新的空字符串并将其分配给string
,然后将不同的字符串对象分配给string
。第二行不会更改您在第一行创建的字符串的内容;它会改变string
指向的内容。因此,第一行唯一有用的效果是声明string
变量。
NSString
是一个表示不可变字符串的类。也就是说,一旦创建了NSString
的实例,就无法更改它。您必须在创建它时提供不可变对象的内容。因此,当你说[[NSString alloc] init]
时,你会得到一个永远不会变为非空的空字符串,并根据你想要做的事情来判断这不是你想要的。
因此,您需要决定是否需要包含“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];