本文只介绍 Swift 中的拷贝和 OC 中的拷贝有哪些不一样的地方,哪些需要我们注意的地方。如果你想更进一步了解深、浅拷贝问题,请点击iOS-深复制(mutableCopy)与浅复制(copy)
字符串之间拷贝
Swift 中的字符串是值类型。如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。
Swift 代码:当我们改变 copyObj2 的值后,你会发现并不会影响copyObj1。
var copyObj1 = String("copyObj1")
var copyObj2 = copyObj1
copyObj2 = "copyObj2";
// copyObj2 --> copyObj2
// copyObj1 --> copyObj1
OC 代码:OC 中的字符串对象是引用类型。当我们改变 copyObj2 的值后,你会发现 copyObj1 的值也会改变。
NSString *copyObj1 = [[NSString alloc] initWithString:@"copyObj1"];
NSString *copyObj2 = copyObj1;
copyObj2 = @"copyObj2";
// copyObj2 --> copyObj2
// copyObj1 --> copyObj2
数组之间拷贝
Swift数组之间拷贝是:值拷贝
var x = [1,2,3]
var y = x
y.append(4)
// y --> [1, 2, 3, 4]
// x --> [1, 2, 3]
OC数组之间拷贝是:引用拷贝
let a = NSMutableArray(array: [1,2,3])
// 我们不想让 b 发生改变
let b: NSArray = a
// 但是事实上它依然能够被 a 影响并改变
a.insert(4, at: 3)
// b --> ( 1, 2, 3, 4 )
网友评论