加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

15.4 Swift深入分析集合类型的拷贝操作

发布时间:2020-12-14 06:30:58 所属栏目:百科 来源:网络整理
导读:// 结构体 ,值类型的赋值操作是深拷贝 struct Deep { var copy: Int = 0 } // 类,引用类型 的赋值操作是浅拷贝 class Shallow { var copy: Int = 0 } var de0 = Deep . init () var de1 = Deep . init () // 数组元素都是值类型 var dearray = [de0,de1] v

// 结构体 ,值类型的赋值操作是深拷贝

struct Deep {

var copy: Int = 0

}

// 类,引用类型 的赋值操作是浅拷贝

class Shallow {

var copy: Int = 0

}

var de0 = Deep.init()

var de1 = Deep.init()

// 数组元素都是值类型

var dearray = [de0,de1]

var sh0 = Shallow.init()

var sh1 = Shallow.init()

// 数组元素都是引用类型

var sharray = [sh0,sh1]

/**

深拷贝,这个地方是两个引用指向两个不同的对象。

因此,我们说值类型 的拷贝它的内存管理非常简单,不需要用ARC什么的来进行处理。

引用类型的内存管理用 ARC

*/

var dearray1 = dearray

var sharray1 = sharray


// dearray1.removeLast()

dearray1[0] = Deep.init(copy: 22)

print("dearray1.count == (dearray1.count)")

print("dearray.count == (dearray.count)")

print("dearray1[0].copy==(dearray1[0].copy)")

print("dearray[0].copy==(dearray[0].copy)")

/**

dearray1.count == 1

dearray.count == 2

dearray1.count == 2

dearray1[0].copy==22

dearray[0].copy==0


当将dearray1数组中的某个元素替换,或者改变了数组的大小,不会影响另外一个数组dearray

1)根据被拷贝的数组大小来创建一个新的数组对象,新的容量跟原始数组大小相同。

2)将原始数组中的每一个元素依次拷贝到新的数组对象中。

*/

dearray1[0].copy = 88

print("dearray1[0].copy==(dearray1[0].copy)")

print("dearray[0].copy==(dearray[0].copy)")

/**

dearray1[0].copy==88

修改副本 属性copy,还是不会影响到原始版本中 copy的值。

*/

sharray1[0].copy = 99

print("sharray1[0].copy==(sharray1[0].copy)")

print("sharray[0].copy==(sharray[0].copy)")

/**

sharray1[0].copy==99

sharray[0].copy==99

这个元素的内容修改时,也改变了原始版本中元素的内容

这个数组Array 是深拷贝。

但是数组中的对象是值类型,修改数组中的对象属性,不会修改到另一个版本。

数组中对象是引用类型,修改数组中的对象属性,还是会修改到另一个版本

*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读