use*_*991 5 objective-c nsmutablearray ios
当您将对象添加到集合中(例如)时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
Run Code Online (Sandbox Code Playgroud)
您可以看到:如果对象是NSMutableString,则看起来对象已被复制-您更改对象将不会影响数组中的对象。
但是,如果对象是NSMutableArray,则在更改对象时,数组中的对象也会更改-就像保留对象或通过引用传递一样。
我在这里想念什么吗?谢谢。
字符串也被保留,一行:
testStr = [@"world" mutableCopy];
Run Code Online (Sandbox Code Playgroud)
您创建一个新字符串并将其副本分配给 testStr 局部变量,因此旧的保留字符串仍在表中
| 归档时间: |
|
| 查看次数: |
3894 次 |
| 最近记录: |