gpt4 book ai didi

Objective-C = 运算符 vs stringWithString/arrayWithArray

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:43 24 4
gpt4 key购买 nike

我是 obj-c 开发的新手,但有部分 C 开发背景。这可能是一个菜鸟问题,但我无法在其他地方得到确切的答案。数组和字符串的这些片段与可能的其他类型的对象有什么区别:

NSArray *original = [NSArray arrayWithObjects:someObjects,nil];
//Case 1
NSArray *copy1 = original;
//Case 2
NSArray *copy2 = [NSArray arrayWithArray:original];

对于字符串

NSString *original = @"aString";
//Case 1
NSString *copy1 = original;
//Case 2
NSString *copy2 = [NSString stringWithString:original];

如果我稍后对 copy1 和 copy2 进行更改,它们会反射(reflect)在原始对象上吗?相同的规则是否适用于其他对象类型?

最佳答案

第二个代码片段对 NSString 的作用与第一个代码片段对 NSArray 的作用相同。行为没有区别,因为 Cocoa 中的 NSStringNSArray 对象都是不可变的

当你调用[NSString stringWithString:original]时,Cocoa 足够聪明,不会创建新对象:这个决定背后的原因是因为 original 无法更改, 您无法将副本与原件区分开来。 [NSArray arrayWithArray:original] 也是如此,因为你得到了相同的实例。

注意:如果 someObjects 是可变的,则可以通过修改对象并查看它是否在其他地方发生变化来区分数组与其深拷贝。但是,arrayWithArray: 方法生成“浅”副本,因此即使数组中的对象是可变的,您也无法检测到差异。

关于Objective-C = 运算符 vs stringWithString/arrayWithArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883672/

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