Objective c Obj-C:[NSString string WITHSTRING:“字符串”与“字符串”;“字符串”;

Objective c Obj-C:[NSString string WITHSTRING:“字符串”与“字符串”;“字符串”;,objective-c,cocoa-touch,ios,nsstring,stringwithstring,Objective C,Cocoa Touch,Ios,Nsstring,Stringwithstring,我见过人们做过类似于[nsstringwithstring:@“some string”]的事情。为什么不干脆做一些字符串呢 例如,请看 是一个类似的问题,但没有一个答案是针对[NSString stringWithString:@“some string”]与@“some string”实际上没有区别[NSString stringWithString:str]如果str已经是不可变的,则不执行任何操作并返回str。除了所需的额外按键之外,没有其他区别。事实上,使用常量字符串作为参数(或不可变

我见过人们做过类似于
[nsstringwithstring:@“some string”]
的事情。为什么不干脆做一些字符串呢

例如,请看


是一个类似的问题,但没有一个答案是针对
[NSString stringWithString:@“some string”]
@“some string”
实际上没有区别
[NSString stringWithString:str]
如果
str
已经是不可变的,则不执行任何操作并返回
str

除了所需的额外按键之外,没有其他区别。事实上,使用常量字符串作为参数(或不可变字符串),您只需获得指向该参数的另一个指针

该方法的主要用途是在子类中:

[NSMutableString stringWithString: @"fdghdfjl"];

将为您提供原始字符串的可变自动释放副本。

关于
stringWithString:
需要注意的一点是,如果源字符串为nil,它将抛出异常

[NSString stringWithString:@“some string”]
从只读内存中复制
@“some string”
,该内存在可执行文件中烘焙,但由于NSString无论如何都是不可变的,我也看不到这一点。@WTP,不-它什么都不做。请参阅@Sven的回答现在我们必须使用@“某些字符串”,否则我们会收到这样的警告“使用'stringWithString':使用文本是冗余的”,它还被用作
[[someString copy]autorelease]
-也就是说,它保证您拥有一个非自有的不可变字符串-我认为有些人会觉得更可读。