我看到它声称以下内容“几乎等同”:
foo([NSString stringWithString:@"blah"]) # version 1
foo([[[NSString alloc] initWithString:@"blah"] autorelease]) # version 2上述内容实际上是字面意义上的等同,还是有任何细微的差异?选择其中之一的原因是什么?
发布于 2009-01-11 10:42:41
两者在功能上是等同的,但正如rpetrich所观察到的那样,在内部的操作可能会略有不同。这对你来说应该无关紧要,只要你觉得方便就用吧。此外,虽然存在微小的性能差异,但在实践中对您的应用程序来说不太可能有什么影响。
但所有这些都忽略了一个关键点:两者都是毫无意义的。通过编写@"foo“,您已经拥有了一个功能齐全的NSString对象。不需要浪费额外的方法来复制字符串;这样做更快、更简单:
foo(@"blah")发布于 2009-01-11 03:57:23
它们是等价的,但我更喜欢"stringWithString“,因为它更简洁。
发布于 2009-01-11 04:07:50
在大多数情况下,唯一的区别是对objc_msgSend的额外调用。
反编译NSString表明,它发送的不是+alloc,而是+allocWithZone:NSDefaultMallocZone()
https://stackoverflow.com/questions/432322
复制相似问题