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

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

        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

         dearray.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

         dearray[0].copy==0

         

         修改副本 属性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 是深拷贝。

         

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

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

         

         */

        

        

        

        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值