首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"stringWithString“与”Alloc... initWithString ... autorelease“

"stringWithString“与”Alloc... initWithString ... autorelease“
EN

Stack Overflow用户
提问于 2009-01-11 03:49:19
回答 4查看 7.5K关注 0票数 3

我看到它声称以下内容“几乎等同”:

代码语言:javascript
复制
foo([NSString stringWithString:@"blah"])                       # version 1
foo([[[NSString alloc] initWithString:@"blah"] autorelease])   # version 2

上述内容实际上是字面意义上的等同,还是有任何细微的差异?选择其中之一的原因是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-11 10:42:41

两者在功能上是等同的,但正如rpetrich所观察到的那样,在内部的操作可能会略有不同。这对你来说应该无关紧要,只要你觉得方便就用吧。此外,虽然存在微小的性能差异,但在实践中对您的应用程序来说不太可能有什么影响。

但所有这些都忽略了一个关键点:两者都是毫无意义的。通过编写@"foo“,您已经拥有了一个功能齐全的NSString对象。不需要浪费额外的方法来复制字符串;这样做更快、更简单:

代码语言:javascript
复制
foo(@"blah")
票数 7
EN

Stack Overflow用户

发布于 2009-01-11 03:57:23

它们是等价的,但我更喜欢"stringWithString“,因为它更简洁。

票数 8
EN

Stack Overflow用户

发布于 2009-01-11 04:07:50

在大多数情况下,唯一的区别是对objc_msgSend的额外调用。

反编译NSString表明,它发送的不是+alloc,而是+allocWithZone:NSDefaultMallocZone()

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/432322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档