我已经看到它声称以下"非常相同":
foo([NSString stringWithString:@"blah"]) # version 1 foo([[[NSString alloc] initWithString:@"blah"] autorelease]) # version 2
事实上,上述字面上是等同还是有任何微妙的差异?选择其中一个的原因是什么?
它们是等价的,但我更喜欢"stringWithString",因为它更简洁.
这两者在功能上是等价的,但正如rpetrich所观察到的那样,内部的运作可能会有所不同.这对您来说无关紧要,请使用对您来说更方便的方式.此外,虽然性能差异很小,但在实践中对您的应用程序来说极不重要.
但所有这些都错过了一个关键点:两者都毫无意义.通过编写@"foo",您已经拥有了一个功能齐全的NSString对象.没有必要乱用额外的方法来复制字符串; 这样做更快捷,更简单:
foo(@"blah")
在大多数情况下,唯一的区别是额外的呼叫objc_msgSend
.
反编译NSString显示,而不是发送+alloc
它发送+allocWithZone:NSDefaultMallocZone()