我看到它声称以下内容“非常相同”:
foo([NSString stringWithString:@"blah"]) # version 1
foo([[[NSString alloc] initWithString:@"blah"] autorelease]) # version 2
上述情况实际上是等同的还是有任何微妙的差异? 选择其中一个的原因是什么?
答案 0 :(得分:8)
它们是等价的,但我更喜欢“stringWithString”,因为它更简洁。
答案 1 :(得分:7)
这两者在功能上是等价的,但正如rpetrich观察到的那样,内部可能会有所不同。这对您来说无关紧要,请使用对您来说更方便的方式。此外,虽然性能差异很小,但在实践中对您的应用程序来说极不重要。
但这一切都错过了一个关键点:两者都没有意义。通过编写@“foo”,您已经拥有了一个功能齐全的NSString对象。没有必要乱用额外的方法来复制字符串;这样做更快捷,更简单:
foo(@"blah")
答案 2 :(得分:5)
在大多数情况下,唯一的区别是额外拨打objc_msgSend
。
反编译NSString表明它不是发送+alloc
而是发送+allocWithZone:NSDefaultMallocZone()
答案 3 :(得分:4)
+ stringWithString:或+数组等方法只是简单的方法,它总是返回自动释放的对象。这些主要用于减少为经常创建的类(例如字符串,数组,字典,数字等)编写的代码量。它们严格遵循上面提到的基本内存管理规则。< / p>