gpt4 book ai didi

cocoa - 是alloc+initWithString : same as copy?

转载 作者:行者123 更新时间:2023-12-03 16:52:53 24 4
gpt4 key购买 nike

基本上,问题是 - 以下内容本质上是相同的吗?

NSString *value1 = ...;
NSString *value2 = [[NSString alloc] initWithString:value1];

NSString *value1 = ...;
NSString *value2 = [value1 copy];

最佳答案

从概念上讲,是的。但是,有一个区别:alloc 始终创建一个新字符串,而 copy 可能返回相同的字符串。

特别是,不可变对象(immutable对象)(例如不可变字符串)可能会通过返回自身而不是创建并返回副本来响应复制。 (毕竟,如果您无法更改原始内容的任何内容,为什么您真的需要副本?)可变字符串将通过创建并返回副本来响应它,正如您所期望的那样。

initWithString: 位于中间:它可能会释放接收器并返回您给它的字符串,类似于 copy 返回接收器的方式。但是,如果发生这种情况,则意味着您浪费了使用 alloc 创建的字符串。使用copy,您可能根本不需要创建任何其他对象。

使用 allocinitWithString: 的唯一原因是,如果您有自己的 NSString 子类,并且想要从现有字符串创建它的实例。 copy 不会使用您想要的子类。由于在 Cocoa 中几乎从不保证子类化 NSString,因此使用 initWithString: (或 stringWithString:)也是如此。

所以底线是,只需使用copy(或mutableCopy)。它更短,更清楚地表达您的意图,而且速度更快。

关于cocoa - 是alloc+initWithString : same as copy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8386084/

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