当前位置:  开发笔记 > 编程语言 > 正文

"stringWithString"vs"alloc ... initWithString ... autorelease"

如何解决《"stringWithString"vs"allocinitWithStringautorelease"》经验,为你挑选了3个好方法。

我已经看到它声称以下"非常相同":

foo([NSString stringWithString:@"blah"])                       # version 1
foo([[[NSString alloc] initWithString:@"blah"] autorelease])   # version 2

事实上,上述字面上是等同还是有任何微妙的差异?选择其中一个的原因是什么?



1> Martin Cote..:

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



2> Mike Abdulla..:

这两者在功能上是等价的,但正如rpetrich所观察到的那样,内部的运作可能会有所不同.这对您来说无关紧要,请使用对您来说更方便的方式.此外,虽然性能差异很小,但在实践中对您的应用程序来说极不重要.

但所有这些都错过了一个关键点:两者都毫无意义.通过编写@"foo",您已经拥有了一个功能齐全的NSString对象.没有必要乱用额外的方法来复制字符串; 这样做更快捷,更简单:

foo(@"blah")



3> rpetrich..:

在大多数情况下,唯一的区别是额外的呼叫objc_msgSend.

反编译NSString显示,而不是发送+alloc它发送+allocWithZone:NSDefaultMallocZone()

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有