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

结构体和类 值类型:结构体枚举
引用类型:
使用类,我们可以通过继承来共享代码。
结构体、枚举无法继承。正好符合swift的面相协议编程的特性。
5.1值类型(value type) 定义: 将内存存储在栈内(这句我百度的),持有者唯一的类型。
通俗的来说就是:值变量被复制时,本身会被复制,而不是引用被复制。
ps. 这里讲的比较抽象。前面在讲迭代器的时候已经有讲过了。忘却的同学可以回头看看~
【[swift|[swift 进阶]读书笔记-第五章(结构体和类 C5P1_2值类型_可变性)】使用场景:我们不用关心其生命周期的优先使用值引用
结构体复制时,只能改变它自己的复制,这个就叫做值语义 (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

    推荐阅读