ios - NSMutableArray 中的addObject 是复制还是保留?

标签 ios objective-c nsmutablearray

当你将对象添加到集合中时,比如NSMutableArray,对象是被复制,即值语义,还是被保留,即引用语义?

我对这个例子感到困惑:

NSMutableString *testStr = [@"test" mutableCopy];
NSMutableArray *arrayA = [[NSMutableArray alloc] init];

[arrayA addObject:testStr];
NSLog(@"%@", arrayA);    // output: test

testStr = [@"world" mutableCopy];
NSLog(@"%@", arrayA);    // output: test

// testStr is copied - value semantics

NSMutableArray *testArr = [@[@1, @2] mutableCopy];
NSMutableArray *arrarB = [[NSMutableArray alloc] init];

[arrarB addObject:testArr];
NSLog(@"%@", arrarB);      // output: [1, 2]

[testArr addObject:@3];
NSLog(@"%@", arrarB);      // output: [1, 2, 3]

// testArr is retained - reference semantics

你可以看到:如果对象是一个NSMutableString,看起来对象被复制了——你改变对象不会影响数组中的对象。

但是,如果对象是一个 NSMutableArray,当你改变对象时,数组中的对象也会改变——就像你保留对象或通过引用传递一样。

我是不是漏掉了什么? 谢谢。

最佳答案

集合保留而不是复制添加到它们的对象。

关于ios - NSMutableArray 中的addObject 是复制还是保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21911927/

相关文章:

ios - Swift - 使用跨多个 View 的属性初始化模型对象

ios - 如何在 iOS 中使用 GIDSignIn 和 GTMOAuth2Authentication 获取刷新 token ?

ios - Swift iOS - collectionView 中的最佳单元格数量

ios - 如何在 Realm.io 中使用主键克隆一个对象(objective-c)

ios - 自定义对象初始化不存储 NSMutableArray 对象与 addObject :

ios - 可变数组 iOS 中的最大元素

iphone - 如何从 subview 中删除 nsmutablearray 的对象?

objective-c - 奇怪的委托(delegate)协议(protocol)声明错误?

objective-c - 尝试访问 iOS 商店时出错

iPhone 界面方向