[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
推荐阅读
- “成长”读书社群招募
- 【0212读书感悟】
- 【读书笔记】贝叶斯原理
- 2018-07-27读书心得
- 读书笔记:博登海默法理学|读书笔记:博登海默法理学 —— 正义的探索(1)
- D034+3组苏曼+《写作这回事》读书笔记
- 最好的生活,首先是好好活着
- 《自我的追寻》读书笔记3
- 【剽悍读书营成长记录】2018年我收获了什么|【剽悍读书营成长记录】2018年我收获了什么 3357-小松
- 【读书清单20】写作吧!你值得被看见(2)