gpt4 book ai didi

iphone - 这两个 NSString 方法之间的区别

转载 作者:可可西里 更新时间:2023-11-01 03:28:14 25 4
gpt4 key购买 nike

所以我今天刚在面试中被问到这个问题,在谷歌搜索后我仍然无法找到答案(事实上我什至找不到任何使用 [NSString string] 方法的代码)。

有什么区别

  1. NSString *someString = [NSString string];
  2. NSString *someString = [[NSString alloc] init];

现在我最初的想法是 [NSString string] 将返回一个自动释放的对象,而使用 alloc 和 init 将返回一个已保留的对象。然而,这个答案似乎是不正确的。

我查看了 Apple 文档中的 NSString 类引用,但它所说的只是

Returns an empty string.

+ (id)string

Return Value
An empty string.

谁能给我解释一下这两者到底有什么区别?

最佳答案

这是您的回答吗?您是否问过为什么您的回答不正确?我问是因为您的假设大部分是正确的(在更高层次上)。

当从 alloc+init 返回时,它并不完全是“保留”的,它是一个你持有一个引用的对象,应该与 release 保持平衡自动释放。为了方便构造函数 (+[NSString string]),您将返回一个对象,您对它的引用为零,但除非您发送它,否则您可以期望它一直存在到弹出当前自动释放池为止显式保留(假设 MRC 或 ARC,因为它被标记为 iOS)。

在较低级别,你可以做出一些猜测,但我不希望在许多 objc 面试中出现这个问题(除非你告诉他们你是中级或高级)。基本上,它是实现定义的,但两种形式都可以返回相同的静态常量 NSString(这可能是面试官正在寻找的)。举例说明:

@implementation NSString

static NSString * const EmptyNSString = @"";

- (id)init
{
self = [super init];
[self release];
return EmptyNSString;
}

+ (id)string
{
return EmptyNSString;
}

...

同样,这是实现定义的,但是明显的优化。同样,在某些情况下,这种优化使得可变变体 (NSMutableString) 的物理子类化具体不可变类型 (NSString) 变得困难。

关于iphone - 这两个 NSString 方法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com