分配时是否必须使用initWithString?

use*_*200 0 objective-c nsstring ios

NSString *str = [[NSString alloc]init];
str = [str initWithString:@""];
Run Code Online (Sandbox Code Playgroud)

这段代码崩溃了.如果我使用如下,那就没关系.

NSString *str = [[NSString alloc]initWithString:@""];
Run Code Online (Sandbox Code Playgroud)

initWithString分配后我不能用吗?

Jac*_*kin 6

您正在重新初始化已通过-init第一行调用初始化的内存.

NSString对象是不可变的,这意味着它们的内部字符缓冲区不能以任何方式修改.如果您需要此功能,请使用NSMutableString.

因此,你的代码对我没有意义,因为没有办法修改字符串,为什么用空字符串创建它?

我建议NSMutableString像这样创建一个对象:

NSMutableString *str = [[NSMutableString alloc] init];
Run Code Online (Sandbox Code Playgroud)

然后,您可以淤泥与周围用各种方法的串(-setString:,replaceCharactersInRange:withString:,等)

我没有看到任何其他原因,你为什么要创建一个字符串(你拥有不少),用空缓冲区初始化.