[swift 进阶]读书笔记-第五章:结构体和类 C5P1_2值类型_可变性

结构体和类

值类型:结构体枚举
引用类型:

使用类,我们可以通过继承来共享代码。
结构体、枚举无法继承。正好符合swift的面相协议编程的特性。

5.1值类型(value type)


定义:

将内存存储在栈内(这句我百度的),持有者唯一的类型。
通俗的来说就是:值变量被复制时,本身会被复制,而不是引用被复制。
ps. 这里讲的比较抽象。前面在讲迭代器的时候已经有讲过了。忘却的同学可以回头看看~

使用场景:我们不用关心其生命周期的优先使用值引用

结构体复制时,只能改变它自己的复制,这个就叫做值语义 (value semantics)

对于类中的对象来说,它是通过传递引用来工作了,所以可以有多个持有者。

值引用的优点:不可能存在循环引用!!!(因为它只有一个持有者) 这个就很酷了,可以在项目中少很多考虑。

5.2可变性

很多bug的起因都是可变性引起的。
Swift 可以让我们在写出安全代码的同时,保留直观的可变代码的⻛格

    ///边遍历边操作数组是危险的 这里会崩溃
    var mArray:NSMutableArray = [1,2,3,4,5,6,7,8]
    for _ in mArray {
        mArray.removeAllObjects()
    }
    
    ///下面是安全的 removeAllObjects方法调用了8次
    ///因为不论如何移除,数组的迭代器的复制依然持有最 开始的三个元素。

    var array:[Int] = [1,2,3,4,5,6,7,8]
    for _ in array {
        mArray.removeAllObjects()
    }
    print(mArray.count) //0

你可能感兴趣的:([swift 进阶]读书笔记-第五章:结构体和类 C5P1_2值类型_可变性)