gpt4 book ai didi

objective-c - 关于 NSString 的 iOS 内存管理

转载 作者:行者123 更新时间:2023-11-28 18:13:45 24 4
gpt4 key购买 nike

有什么不同

NSString * str = @"123";

NSString * str = [[NSString alloc] initWithString:@"123"];

从编译器的角度?

最佳答案

理论上是的;在实现细节上,可能不是。

在第一种情况下,编译器创建一个常量字符串并将指向它的指针分配给变量str。您不拥有该字符串。

在第二种情况下,编译器创建一个常量字符串(和以前一样),但这次它被运行时用作初始化您拥有的另一个字符串的参数(因为第二个字符串是使用 创建的分配).

这就是您需要了解的内容。

但是,还有很多优化正在进行。因为 NSStrings 是不可变的,你会发现 initWithString: 实际上只是返回参数。通常,它会在将参数返回给您之前保留该参数(因为您希望拥有它)但是文字字符串有一个特殊的 retainCount(我认为是 INT_MAX)来阻止运行时尝试解除分配他们。因此在实践中,您的第二行代码会产生与第一行相同的结果。

顺便说一句,这就是为什么 top 在第一种情况下说字符串是自动释放的原因是不正确的,因为它不是。它只是一个具有特殊保留计数的常量字符串。

但是您可以而且应该放心地忽略实现细节,只需记住,在第一种情况下您不拥有该字符串,但在第二种情况下您拥有它。

关于objective-c - 关于 NSString 的 iOS 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923715/

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