+ [NSString stringWithString:] - 重点是什么?

jef*_*091 18 cocoa cocoa-touch objective-c nsstring

由于NSString字符串是不可变的,stringWithString:类方法的价值是什么?

我在使用时得到了实用程序NSMutableString,我只是没有看到NSString该类的实用程序.

Don*_*hey 21

您可能有一个要复制的NSMutableString(或某些自行开发的NSString子类).

NSMutableString *buffer = [NSMutableString string];
// do something with buffer
NSString *immutableStringToKeepAround = [NSString stringWithString:buffer];
Run Code Online (Sandbox Code Playgroud)

当然,你也可以复制一份:

NSMutableString *buffer = [NSMutableString string];
// do something with buffer
NSString *immutableStringToKeepAround = [[buffer copy] autorelease];
Run Code Online (Sandbox Code Playgroud)

但你拥有副本,必须发布或自动发布.

  • 一个小的区别是[[nil copy] autorelease]将返回nil,但[NSString stringWithString:nil]将抛出异常. (13认同)

Fed*_*les 9

正如"Andy"在#318666中指出的,它与内存管理有关,引用:

initWithString和stringWithString之间的区别在于stringWithString返回一个自动释放的指针.这意味着您不需要专门发布它,因为下次自动发布池会清除任何自动释放的指针时会注意到这一点.

另一方面,initWithString返回一个保留计数为1的指针 - 你需要在该指针上调用release,否则会导致内存泄漏.

(摘自这里)